我试图制作一个指针向量来提升线程对象。然后,此向量是在调用类构造函数时从指针创建的类的成员。它看起来像这样。
#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向量执行相同操作时,我没有任何问题。如果你认为这种方法将我的工作线程组织成一个指针向量,所以我可以单独初始化和管理它们是不好的,那么我想我可以使用一个线程组,但是希望这个方法能够工作。 有帮助吗?感谢。
答案 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