簡體   English   中英

在Qt中未定義對vtable的引用

[英]Undefined reference to vtable in Qt

我無法檢測代碼中的任何錯誤時遇到了虛擬表錯誤。 有人可以向我指出正確的方向嗎? 很抱歉使用荷蘭語,希望這不是問題。

#ifndef LIJST_H
#define LIJST_H

#include "product.h"
#include <list>

typedef list<Product*> lijst;

#endif // LIJST_H

// Methode

#ifndef METHODE_H
#define METHODE_H

#include "lijst.h"

class Methode
{
public:
    Methode() {}
    virtual ~Methode() {}
    virtual double run(lijst *items);
};

#endif // METHODE_H

// Productmethode
#ifndef PRODUCTMETHODE_H
#define PRODUCTMETHODE_H

#include "methode.h"

class ProductMethode : public Methode
{
private:
    map<string,double> kortingsTabel;
public:
    ProductMethode() {}
    void addKorting(string naam, double korting);
    double run(lijst *items);
};

// Main
#include <QCoreApplication>
#include "factuur.h"
#include "product.h"
#include "globalemethode.h"
#include "productmethode.h"
#include "drempelmethode.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    GlobaleMethode G ( 0.1 );
    ProductMethode P;
    P.addKorting ( "Melk", 0.1 );
    P.addKorting ( "Boter", 0.05 );
    Factuur F ( &G );
    F.addProduct ( new Product ( "Melk", 0.75 ) );
    F.addProduct ( new Product ( "Kaas", 5 ) );
    F.addProduct ( new Product ( "Boter", 1.7 ) );
    cout << F.totaal ( ) << endl;
    F.setMethode ( &P );
    cout << F.totaal ( );

    return a.exec();
}

您剛剛在Methode類中聲明了一個方法:

virtual double run(lijst *items);

還需要定義該方法。 僅純虛函數允許沒有定義。

同樣,通常會使用virtual來覆蓋某些基類方法對派生類的行為,但是在您的示例中,您沒有提供針對被覆蓋的virtual方法的定義。 你應該。 如果不需要,那么為什么要從一開始就將方法virtual 它不必是virtual


讀得好:

“虛擬表”是未解決的外部意味着什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM