【问题标题】:Undefined reference to vtable for class despite no virtual function尽管没有虚函数,但未定义对类的 vtable 引用
【发布时间】:2020-04-09 11:55:03
【问题描述】:

我正在为我的一门课程练习 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'

谢谢

【问题讨论】:

  • 错字:将void valueChanged(int newValue){} 更改为void valueChanged(int newValue);。信号没有被实现,它们只是被定义了。
  • 感谢您的回复,很抱歉这么晚才回复。我尝试更改它,但它仍然给我LNK2001: unresolved external symbol "public: virtual void * __thiscall C

标签: qt inheritance polymorphism vtable qobject


【解决方案1】:

就像 eyllanesc 在 cmets 中所说的那样,您不应该为信号提供定义。 只应声明信号,Qt meta-object compiler (moc) 将为它生成所需的定义。 所以:

...
signals:
    void valueChanged(int newValue);
...

【讨论】:

  • 谢谢,我不知道。但是它仍然给我一个`LNK2001: unresolved external symbol "public: virtual void * __thiscall C`error
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多