我正在尝试创建一个 Parallel
类,它是 std::thread
的子类,因此我的类在 Parallel.h
中定义>,但主要方法在同一项目(在 visual studio 中)的单独文件 main.cpp
中定义。当我创建 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);
}
}
//在main.cpp中
void main(){
Parallel p;
p.join();
thread t(print);
t.join();
system("Pause");
}
问题是如何定义一个线程类的适当子类,它有一个以函数名作为参数的重载构造函数,也
当定义 p.join()
时,编译器在 VS2012 中出现以下错误:
Error 2 error C2247: 'std::thread::join' not accessible because 'Para::Parallel' uses 'private' to inherit from 'std::thread' C:\Users\Gamer\Desktop\PROJECQ\VC++@OMAQ\CQ47\CQ47\main.cpp 11
3 IntelliSense: function "std::thread::join" (declared at line 209 of "H:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\thread") is inaccessible c:\Users\Gamer\Desktop\PROJECQ\VC++@OMAQ\CQ47\CQ47\main.cpp 11
最佳答案
当你尝试调用'p.join()'时出现关于“uses 'private' to inherit”的错误是因为你写了:
class Parallel:thread
什么时候你应该写:
class Parallel : public thread
默认是私有(private)继承,这意味着基类的所有方法在继承类上都是私有(private)的。如果您希望它们可访问,则必须指定继承应该是公开的。
关于c++ - 如何在 C++ 中正确创建线程类的子类(std::thread 的子类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210120/