我在这里看到了一些类似的问题,但我仍有问题。
我在QT中有一个按钮,我在main.cpp文件中定义了一个函数。当我按下QT按钮时,我想调用main.cpp中的函数并让该函数执行它的操作。
mainwindow.cpp:
void MainWindow::on_StartMotor_clicked()
{
SendCmd(100);
}
main.cpp中:
void SendCmd(INT Value)
{
}
但是我收到了一个错误:
error: 'SendCmd' was not declared in this scope
SendCmd(100);
^
我是QT的新手,所以我不认为我完全理解插槽和信号的事情。
谢谢!
答案 0 :(得分:1)
这不是QT的问题,而是基本的C ++。因此,我的一般建议是购买一些好书并从基础开始学习这门语言。
在您的特定设置中,您有两个cpp文件。在这种情况下,它们被称为翻译单元,因为这些文件中的每一个都是单独编译的。结果就是所谓的目标文件(.obj)。链接器的作用是使另一个文件知道一个目标文件的功能。
现在,如果翻译单位知道其他翻译单位的功能声明,链接器只能完成他的工作。
通常,您会有一些包含此声明的头文件。
main.h:
void SendCmd(INT Value); // what type is INT by the way?
现在,main.cpp和mainwindow.cpp都应包含此文件。这样,您就不会收到编译器错误,因为mainwindow.cpp具有要调用此函数的声明。并且由于main.cpp被编译,链接器在其函数库中有一些该函数的实现,并且可以让mainwindow.cpp知道它。