我一直在编写一个自定义类中的物理模拟编码,我知道尝试使用Qt 4.8编写GUI。
在我看来,这样做的权利是在Qt中添加我的类的一个实例作为我的MainWindow对象的成员。
我的家庭烹饪班很方便,但我在将它添加到Qt项目时遇到了麻烦。我尝试使用通常的 #include“my_custom_class.h”(一切都在此标题中定义,我通常不会将其拆分为cpp文件)
到我的mainwindow.h文件中,在编译时,我得到第一个类的每个成员一条错误消息:my_custom_class :: member1()的多个定义等...
我也试过了:
class my_custom_class;
但它也不起作用,我对此并不满意,因为我真的不明白它的真正含义。
答案 0 :(得分:1)
我通常不会将其拆分为cpp文件
C和C ++有标题(.h)和implmentation(.c / .cpp)文件。如果没有看到代码,我会说你不使用实现文件让自己变得困难。
同样,如果没有你展示你的代码,很难准确地识别问题,但我的猜测是你缺少一个标题保护。
当您为标题调用#include时,编译器会添加该文件的内容以进行构建。如果多个文件通过调用包含头文件的文件直接或间接调用相同的#include,则会添加相同的符号进行编译,从而导致“多个定义为...”的错误。
您可以在头文件中添加一个标题保护,如下所示: -
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
//... add your class here
#endif
第一次包含标题时,它将添加符号并定义_MYCLASS_H_。任何后续调用包含您的标题都会看到_MY_CLASS_H_已经定义,并且不会再次添加符号。
您应该对所有头文件执行此操作。我还建议您在标头中定义类,并创建一个单独的实现文件。如果有的话,它会加快编译时间。