2011-11-09 57 views
0

我有休耕类:添加构件的boost :: ptr_vector <>

class CpuUsage { 
public: 
    CpuUsage(); 
    virtual ~CpuUsage(); 

    void SetCpuTotalTime(CpuCore _newVal); 
    CpuCore GetCpuTotalTimes(); 

    void AddSingleCoreTime(CpuCore& newval); 
private: 
    CpuCore total; 
    boost::ptr_vector<CpuCore> cpuCores; 
}; 

class CpuCore { 

public: 
    CpuCore(); 
    CpuCore(int _coreId, long _user, long _nice, long _sysmode, 
     long _idle, long _iowait, long _irq, long _softirq, long _steal, 
     long _guest); 

//all variable declarations... 
} 

对于添加CpuCore对象到cpuCores矢量,我要补充的指针?或者,我可以复制的价值,normaly,如:

void CpuUsage::AddSingleCoreTime(CpuCore _newVal) { 
    cpuCores.push_back(_newVal); 
} 

随着CpuCore * _newVal参数,我有以下错误:
../src/usage/CpuUsage.h:42:错误:“升压:: ptr_vector> CpuUsage :: cpuCores'是私人的 ../src/NodeInfoGather.cpp:73:错误:在这种情况下

什么问题的矢量是私人在这里?

感谢,

+0

您应该添加一个指针,'boost :: ptr_vector <>'拥有指针及其指向的内容。为什么不使用'std :: vector <>'? –

+0

我在这篇文章中使用了boost ptr向量:http://stackoverflow.com/questions/2693651/c-vector-of-objects-vs-vector-of-pointers-to-new-objects –

+1

你不似乎在给定的代码上具有多于'CpuCore'的多态性。然而,发布的代码并不真实,“AddSingleCoreTime”的声明和定义不同。 –

回答

0

你有一个指针到ptr_vector。请注意,它会采取指针的所有权,所以只是做

cpuCores.push_back(&_newVal); 

可能严重搞砸。如果你真的想要它(这不是你的问题),你可以实现virtual constructor

+0

不错,它确实有效。但是我会修改我的架构,也许我真的不需要指针向量 - 我仍然必须理解C++的所有权 –

相关问题