由于模板和线程问题,c ++ 11编译失败

时间:2017-10-18 23:33:05

标签: multithreading c++11

我正在尝试按照本教程http://www.cplusplus.com/reference/thread/thread/

创建新主题

以下是我写的相关代码

Game.cpp:

bool somethingWasTrue = true;
if( x )
    z = 0;
else if( y )
    z = ResultOfSomething();
else
    somethingWasTrue = false;

if( somethingWasTrue )
{
    // code that uses z
}

Game.hpp:

Game :: Game (bool isDebug, bool startNew) {
    // ...
    std :: thread gameThread(Game :: tick);
}

void Game :: tick() {
    std :: this_thread :: sleep_for(std :: chrono :: seconds (1));
    funds += getIncomeRate();
}

我在编译时遇到的错误是

#ifndef Game_hpp
#define Game_hpp

#include <thread>

using namespace std;

class Game{
    public:
    // ...
        Game (bool, bool);
        void tick();
};

#endif /* Game_hpp */

我对C ++和模板一般不太熟悉,我真的不明白我的代码有什么问题。如果这是一个微不足道的问题,请事先道歉。

2 个答案:

答案 0 :(得分:3)

你想:

std::thread gameThread(&Game::tick, this);
//                    ^^^           ^^^^

答案 1 :(得分:1)

由于包装到线程中的方法不是static(而不是自由函数),因此需要为线程构造函数提供对类实例的引用。