我一直在编写包含在自定义类中的物理模拟,并且我知道尝试使用 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/