c++ - 将自定义类添加到 Qt 项目

标签 c++ qt

我一直在编写包含在自定义类中的物理模拟,并且我知道尝试使用 Qt 4.8 为其编写 GUI。

在我看来,正确的做法是将我的类的一个实例添加为 Qt 中的 MainWindow 对象的成员。

我的 homecooked 类本身运行良好,但我在将它添加到 Qt 项目时遇到了问题。我尝试使用通常的 #include "my_custom_class.h"(一切都在这个头文件中定义,我通常不会将它拆分在一个cpp文件中)

到我的 mainwindow.h 文件,在编译时,我为我的第一个类的每个成员都得到一条错误消息:my_custom_class::member1() 的多个定义,等等......

我也试过:

类 my_custom_class;

但它也不起作用,我对此不太满意,因为我并不真正理解它的真正作用。

最佳答案

I usually don't split it in a cpp file

C 和 C++ 有头文件 (.h) 和实现文件 (.c/.cpp) 是有原因的。在没有看到代码的情况下,我会说您不使用实现文件给自己造成了困难。

同样,如果您不显示您的代码,就很难准确地找出问题所在,但我猜您缺少一个 header guard。

当您为 header 调用#include 时,编译器会添加该文件的内容以进行构建。如果多个文件直接或通过调用包含头文件的文件间接调用相同的#include,则将添加相同的符号进行编译,从而导致“multiple definition for ....”错误

你可以做的是在你的头文件中添加一个header guard,就像这样:-

#ifndef _MYCLASS_H_
#define _MYCLASS_H_

//... add your class here

#endif

第一次包含标题时,它将添加符号并定义 _MYCLASS_H_。任何包含您的 header 的后续调用都会看到 _MY_CLASS_H_ 已经定义并且不会再次添加符号。

您应该对所有头文件执行此操作。我还建议您在 header 中定义类并创建一个单独的实现文件来配合它。如果有的话,它会加快编译时间。

关于c++ - 将自定义类添加到 Qt 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496034/

相关文章:

c++ - 为什么按下 "Tab"键只会发出 QEvent::ShortcutOverride 事件?

qt - 如何处理QTableView长按?

c++ - 在QT中读取窗口的注册表

c++ - 如何将此代码从递归更改为迭代

c++ - 为什么我可以将字符分配给字符串对象而不是字符串对象的 vector ?

c++ - 初始化指向 vector 的指针 vector

c++ - 比较键和值 std::maps

qt - 将 Gmock 设置为 QT (Windows)

linux - 使用 Qt(在 X11 上)检测窗口标题栏中的控制按钮位置

c++ - 如何从多个线程使用 ffmpeg 的 sws_scale?