我正处于我想创建一个新类然后在另一个创建的类(C ++)中使用它的情况,但是没有使用不同的头文件或源文件:这两个类应该在同一个地方,单向或者另一个。主类只应包含指向“子”类的指针。
现在我知道在很多情况下完全可以在头文件中定义一个类。事实上,如果一个人不想只设置一个指向那个“子类”的指针,而是实际使用头文件中已有的一种方法(例如,对于内联方法),实际上必须在源文件中定义它:
class ChildClass
{
public:
bool myFunctions() { return true; }
}
class MainClass
{
private:
ChildClass* poChildClass;
inline bool getResult() { return poChildClass->myFunctions(); }
}
但是我想我只想在那里指定那个指针,而不需要调用我的ChildClass方法,所以我应该只能声明ChildClass,然后在定义MainClass的同一.cpp文件中定义它:< / p>
//in .hpp
class ChildClass;
class MainClass
{
private:
ChildClass* poChildClass;
}
//in .cpp
class ChildClass
{
public:
bool myFunctions() { return true; }
}
//etc.
在第一时刻,我不知道会出现什么问题。但是在尝试使用我的一个类(特别是基于Qwt的QwtPlotPicker类)时,我得到了一些编译错误(在最后一个版本中):
error: undefined reference to `vtable for Picker'
错误指出以下代码中的位置(在.cpp中):
class Picker : public QwtPlotPicker
{
Q_OBJECT
public:
Picker( QWidget* canvas ) :
QwtPlotPicker( canvas ) //Here lies the error the compiler says
//...
那么问题是什么?我怎么得到这个“未定义的引用'vtable'”问题?
感谢您的帮助,
Momergil
答案 0 :(得分:1)
这是我在使用QT时遇到的问题。在运行qmake之前,任何具有Q_OBJECT宏的类必须在HEADERS中列出(据我所知)。这甚至可能意味着将.cpp文件放在HEADERS部分。