0

私は落ち込んでいるクラスを持っています:

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 ベクターに追加するには、ポインターを追加する必要がありますか? または、通常は次のように値をコピーできます。

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

CpuCore *_newVal パラメーターを使用すると、次のエラーが発生します:
../src/usage/CpuUsage.h:42: エラー: 'boost::ptr_vector > CpuUsage::cpuCores' is private ../src/NodeInfoGather.cpp: 73: エラー: このコンテキスト内

ここでベクトルがプライベートであるという問題は何ですか?

ありがとう、

4

1 に答える 1

0

へのポインタを追加する必要がありますptr_vector。そのポインターの所有権を取得することに注意してください。

cpuCores.push_back(&_newVal);

物事をひどく台無しにするかもしれません。ただし、本当に必要な場合 (質問からは明確ではありません)、仮想コンストラクターを実装できます。

于 2011-11-09T15:31:33.070 に答える