C++ 创建指向boost::线程指针向量的指针
我试图创建一个指针向量来提升线程对象。然后,该向量是在调用类构造函数时从指针在堆上创建的类的成员。看起来像这样C++ 创建指向boost::线程指针向量的指针,c++,pointers,vector,boost-thread,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
#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
VisualC++ 2010给了我一个错误:Boo::线程指针向量。它在构造函数中的WorkerThreads下面加下划线,并表示“表达式必须是可修改的左值”。我用M_网络向量做同样的事情时没有问题。如果您认为这种将工作线程组织成指针向量的方法不好,这样我就可以单独初始化和管理它们,那么我想我可以使用一个线程组,但我想让这种方法发挥作用。
有什么帮助吗?谢谢。我遇到了一个与您类似的错误:
class A
{
int B;
public:
A()
{
B = 0;
}
int B();
};
建议:不要将您的成员函数命名为与您的成员数据相同的名称。我试图将您的问题复制到一个较小的示例中,以供其他人参考。在MacOSX10.6上使用GCC4.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;
}
“看起来像这样”不足以说明你做错了什么。发布完整的代码。你想让我发布整个课程吗?(50行)@JAKE6459:最好是一个最小(但完整)版本,仍然存在问题,但50行还可以。@Alf P.Steinbach:我添加了这个类(删除了很多注释以缩短它)。@Jake为什么要在堆上分配
std::vector
?在内部,它将在堆上分配存储空间。使用短语“Face Palm”是否适合这种情况?谢谢你。
#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