创建指向Vector :: thread指针的指针

时间:2011-03-13 22:58:26

标签: c++ pointers vector boost-thread

我试图制作一个指针向量来提升线程对象。然后,此向量是在调用类构造函数时从指针创建的类的成员。它看起来像这样。


#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给出了boost :: thread指针向量的错误。它在构造函数中强调了WorkerThreads,并说“表达式必须是可修改的左值”。使用M_Network向量执行相同操作时,我没有任何问题。如果你认为这种方法将我的工作线程组织成一个指针向量,所以我可以单独初始化和管理它们是不好的,那么我想我可以使用一个线程组,但是希望这个方法能够工作。 有帮助吗?感谢。

2 个答案:

答案 0 :(得分:1)

我遇到了类似的错误:

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

    int B();
};

建议:不要将您的成员函数命名为与您的成员数据相同的名称。

答案 1 :(得分:0)

我尝试将您的问题重现为其他人的较小示例。它似乎是在Mac OS X 10.6上使用gcc 4.2.1编译的。

#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;
}

编译&amp;链路

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