如何在C ++中正确创建线程类的子类(std :: thread的子类)

Bud*_*nga 4 c++ multithreading c++11 visual-studio-2012

我试图创建一个类Parallel是的子类std::thread,所以我的类中定义Parallel.h的,但在不同的文件中定义的主要方法main.cpp。当我创建的实例在同一个项目(在Visual Studio)Parallel和执行join()的功能main()如下方法代码段:我是C ++的新手,这里是“ Parallel.h”-

#include<thread>
using namespace std;
namespace Para{
class Parallel:thread
{
public:

    static void run(){

    }
    Parallel(void)
    {
    }

    virtual ~Parallel(void)
    {
    }

    inline static void start(Parallel* p){
                // (*p).join();
    }

    virtual void Parallel::start(thread& t){

    }
    static void parallelize(Parallel& p1,Parallel& p2){

    }
    inline virtual Parallel* operator=(thread* t){
        return  static_cast<Parallel*>(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

//在main.cpp中

void main(){

    Parallel p;
    p.join();
    thread t(print);
     t.join();
     system("Pause");

}
Run Code Online (Sandbox Code Playgroud)

问题是如何定义一个线程类的适当子类,该线程类具有以函数名作为参数的重载构造函数,并且当定义的p.join()编译器在VS2012中给出以下错误时:

错误2错误C2247:'std :: thread :: join'无法访问,因为'Para :: Parallel'使用'private'从'std :: thread'继承C:\ Users \ Gamer \ Desktop \ PROJECQ \ VC ++ @ OMAQ \ CQ47 \ CQ47 \ main.cpp 11

3 IntelliSense:函数“ std :: thread :: join”(在“ H:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ thread”的第209行声明)无法访问c:\ Users \ Gamer \桌面\ PROJECQ \ VC ++ @ OMAQ \ CQ47 \ CQ47 \ main.cpp 11

Sea*_*ton 6

当您尝试调用'p.join()'时,有关“使用'private'继承”的错误是因为您已编写:

    class Parallel:thread
Run Code Online (Sandbox Code Playgroud)

什么时候应该写:

    class Parallel : public thread
Run Code Online (Sandbox Code Playgroud)

默认值为私有继承,这意味着基类的所有方法在继承类上都变为私有。如果您希望继承是可访问的,则必须指定继承应该是公共的。