2011-03-13 86 views
0

我試圖做一個向量來提升線程對象。這個向量就是在調用類構造函數時從指針堆中創建的類的成員。它看起來像這樣。創建指針向量的boost ::線程指針


#ifndef NETWORKSYSTEM_H 
#define NETWORKSYSTEM_H 
#include "Network.h" 
#include "Misc.h" 
#include "Enumerators.h" 
#include < vector> 
#include < boost\thread.hpp> 
#include < boost\filesystem.hpp> 
#include < string> 
#include < iostream> 
class NetworkSystem 
{ 
private: 
    Status NetworkStatus; 
    boost::filesystem3::path *ProjectPath; 
    std::string ProjectName; 
    //vector for pointers to networks 
    std::vector< Network*> *M_Network; 
    //Threading Components 
    boost::thread *MainThread; 
    std::vector< boost::thread *> *WorkerThreads; 
    void MainThreadFunction(); 
    void WorkerThreadFunction(); 
public: 
    NetworkSystem(); 
    ~NetworkSystem(); 
    int SetWorkerThreads(int P_WorkerThreads, bool Wait); 
    int TotalNetworks(); 
    int WorkerThreads(); 
    int PauseAtNetworksCompletion(bool Wait); 
    int PauseAtGenerationsCompletion(bool Wait); 
}; 
#endif 

// class constructor 
NetworkSystem::NetworkSystem() 
{ 
    ProjectPath = new boost::filesystem3::path(); 
    M_Network = new std::vector< Network*>; 
    WorkerThreads = new std::vector< boost::thread*>; 
    NetworkStatus = NO_PROJECT_OPEN; 
    MainThread = new boost::thread(&NetworkSystem::MainThreadFunction, this); 
}; 

的Visual C++ 2010,我與升壓::線程指針的矢量誤差。它在構造函數中強調了WorkerThreads,並且表示「表達式必須是可修改的左值」。使用M_Network矢量做同樣的事情時,我沒有任何問題。如果您相信這種將我的工作線程組織到指針向量中的方法,以便我可以單獨初始化和管理它們,那麼我想我可能會使用線程組,但希望使此方法正常工作。 有什麼幫助嗎?謝謝。

+1

「看起來是這樣的」不足以說你做錯了什麼。發佈完整的代碼。 – 2011-03-13 23:08:33

+0

你想讓我發佈全班嗎? (50行) – contrapsych 2011-03-14 01:06:12

+1

@ JAKE6459:最好的是最小的(但是完整的)版本,仍然存在問題,但50行是確定的。 – 2011-03-14 01:09:10

回答

1

我有一個類似的錯誤和你:

class A 
{ 
    int B; 
public: 
    A() 
    { 
     B = 0; 
    } 

    int B(); 
}; 

忠告:不要對你的成員函數相同的名稱,您的會員數據。

+0

正在使用適合這種情況的短語「Face-Palm」嗎?不過謝謝。 – contrapsych 2011-03-14 01:46:55

0

我試圖將您的問題重現爲其他人的較小示例。這似乎編譯使用我在Mac OS X的gcc 4.2.1 10.6

#include <vector> 
#include <boost/thread.hpp> 

class Foo 
{ 
public: 
    Foo() 
    { 
     WorkerThreads = new std::vector<boost::thread*>; 
    } 

private: 
    std::vector< boost::thread *> *WorkerThreads; 
}; 

int 
main() 
{ 
    const Foo foo; 
} 

編譯&鏈接

g++ -I/opt/local/include -L/opt/local/lib -Wl,-rpath,/opt/local/lib -lboost_thread-mt vector.cc