Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QT中单击按钮时调用函数_C++_Qt - Fatal编程技术网

C++ 在QT中单击按钮时调用函数

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

我在这里看到了一些类似的问题,但我仍然有问题

我在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,所以我不认为我完全理解插槽和信号的事情


谢谢 在特定设置中,您有两个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值)”