尽管没有虚函数,但未定义对vtable的引用

问题描述 投票:-1回答:1

我正在为我的一门课程使用QT进行练习,尽管没有虚拟功能,但我仍然得到Undefined reference to vtable for class。我一直在寻找解决方案,但似乎它们都至少具有一个声明为虚函数的函数。这是代码:

class C : public QObject
{
Q_OBJECT
public:
    C(int value) { value_ = 0; }
    int getValue() const { return value_; }
public slots:
    void setValue(int value){
        if (value != value_) {
            value_ = value;
            emit valueChanged(value);
        }
    }
signals:
    void valueChanged(int newValue){}
private:
    int value_;
};

我不知道发生了什么。我试图更改函数名称,以防万一它们与基类中的某些函数具有相同的名称,但是它不能解决任何问题。这是错误:

/*path of file*/
error : undefined reference to `vtable for C'

谢谢

qt inheritance polymorphism vtable qobject
1个回答
0
投票

就像eyllanesc在评论中说的那样,您不应提供信号的定义。仅应声明信号,并且Qt meta-object compiler(moc)将为其生成所需的定义。因此:

...
signals:
    void valueChanged(int newValue);
...
© www.soinside.com 2019 - 2024. All rights reserved.