C++ 在QT中单击按钮时调用函数
我在这里看到了一些类似的问题,但我仍然有问题 我在QT中有一个按钮,在main.cpp文件中定义了一个函数。当我按下QT按钮时,我想调用main.cpp中的函数,让该函数完成它的任务 mainwindow.cpp:C++ 在QT中单击按钮时调用函数,c++,qt,C++,Qt,我在这里看到了一些类似的问题,但我仍然有问题 我在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 decla
void MainWindow::on_StartMotor_clicked()
{
SendCmd(100);
}
main.cpp:
void SendCmd(INT Value)
{
}
但我有一个错误:
error: 'SendCmd' was not declared in this scope
SendCmd(100);
^
我是新来的QT,所以我不认为我完全理解插槽和信号的事情
谢谢这不是QT问题,而是C++基础问题。因此,我的一般建议是买一些好书,从基础开始学习这门语言 在特定设置中,您有两个cpp文件。在这种情况下,它们被称为翻译单元,因为这些文件中的每一个都是单独编译的。其结果就是所谓的对象文件(.obj)。链接器的任务是使一个对象文件的函数为另一个文件所知 现在,只有当翻译单元知道其他翻译单元的功能声明时,链接器才能完成他的工作 通常,您会有一些包含此声明的头文件 主要条款h:
void SendCmd(INT Value); // what type is INT by the way?
现在,main.cpp和mainwindow.cpp都应该包含这个文件。这样,就不会出现编译器错误,因为mainwindow.cpp有一个要调用的函数声明。由于main.cpp是编译的,链接器在其函数库中有此函数的一些实现,可以让mainwindow.cpp知道它。看起来您的问题实际上与qt无关,但是,你不能调用一个在Me.cpp中定义的函数,它不知道函数的不同类,你不仅是QT的新手,而且C++中也是新的…阅读一个好的C++会对你有所帮助。您只需在使用函数之前声明它:add in main window.cpp,在您单击启动马达之前单击此行:
void SendCmd(INT值)代码>。或者(哪一个更好)是的,我会读一本书:)但是现在我把我所有的函数移到了一个名为“tmclfunctions.h”的头文件中。在我的mainwindow.cpp和main.cpp中,我写了以下内容:#包括“tmclfunctions.h”,并收到一个错误,说我的函数声明了两次。@Scientized我希望您已将函数实现移动到包含标头的某个cpp文件中,因为这是正确的方法。您还应该在头文件中添加include-guards。在VS中,该文件的代码在文件顶部是#pragma once
,但也有独立于编译器的解决方案。在谷歌上快速搜索“includeguard”应该会有所帮助,因为它基本上有三行代码,不适合这个应用程序comment@Scientized如果在头文件中定义函数并从多个cpp文件中包含它,则必须声明该函数为静态函数或内联函数。因此,函数声明应该如下所示:“inline void SendCmd(int Value);”或“静态void SendCmd(int值)”