Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建指向boost::线程指针向量的指针_C++_Pointers_Vector_Boost Thread - Fatal编程技术网

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