C++ 链接错误与Qthreads

C++ 链接错误与Qthreads,c++,multithreading,qt,C++,Multithreading,Qt,嘿,我正在尝试用Qthread做这个基本程序。我有链接错误,不知道如何解决它。 在我调用operate的main方法中,它给出了以下错误: main.obj:-1:错误:LNK2019:外部错误 符号“public:void\u thiscall Controller::operate(void)” (?operate@Controller@@QAEXXZ)“在Funktion”_main中” #包括 #包括 #包括 班级工作人员:公共QObject { Q_对象 公众时段: 无效销钉(){ Q

嘿,我正在尝试用Qthread做这个基本程序。我有链接错误,不知道如何解决它。 在我调用operate的main方法中,它给出了以下错误:

main.obj:-1:错误:LNK2019:外部错误 符号“public:void\u thiscall Controller::operate(void)” (?operate@Controller@@QAEXXZ)“在Funktion”_main中”

#包括
#包括
#包括
班级工作人员:公共QObject
{
Q_对象
公众时段:
无效销钉(){
QString结果;
对于(int i=0;isleep(1);
}
返回a.exec();
}

你知道它可能是什么吗?

你不会像函数一样调用它来发出信号。这将尝试调用
operate()
的一个实现,但它没有

发出信号使用

emit c->operate(); //does not work with qt4. use implementation below
虽然这是可行的,但Qt建议只从类内部发出信号

class Controller : public QObject
{
//...
    void startWork() { emit operate(); }
//...
};

您不会像函数一样调用它来发出信号。这将尝试调用
operate()
的一个实现,而该实现并不存在

发出信号使用

emit c->operate(); //does not work with qt4. use implementation below
虽然这是可行的,但Qt建议只从类内部发出信号

class Controller : public QObject
{
//...
    void startWork() { emit operate(); }
//...
};

void operate()的实现在哪里?@Brett MichaelGreen它是一个发送到DoWork的信号此{}在declarationsignals中丢失了operate(){}不应该有一个实现。它们应该只被声明。我用花括号看到它不是信号,而是方法。void operate()的实现在哪里?@Brett MichaelGreen它是一个发送到DoWork的信号此{}在declarationsignals中缺少operate(){}不应该有一个实现。它们应该只被声明。我用花括号看到它不是信号,而是method@hereIam它是“编译”还是“工作”?您使用的是哪个Qt版本。在旧的Qt版本上,您只能从类内部发出信号。我将此添加到了答案中。您是否将
c->operate();
替换为
emit c->operate();
?是的,还尝试了您的技巧void startWork(){emit operate();},不工作是同一个链接器错误还是这次使用了
display
?顺便说一句,你从来没有像信号一样使用display,而是作为一个普通的函数调用。信号不是用来做这个的。也许你应该读一下:我有一个来自官方页面的例子:@hereIam做“编译”或“工作”?您使用的是哪个Qt版本。在旧的Qt版本上,您只能从类内部发出信号。我将此添加到了答案中。您是否将
c->operate();
替换为
emit c->operate();
?是的,还尝试了您的技巧void startWork(){emit operate();},不起作用是同一个链接器错误还是这次使用了
display
?顺便说一句,你从来没有像信号一样使用display,而是将其作为一个正常的函数调用。信号不是用于此的。也许你应该读一下:我有来自官方页面的示例: