簡體   English   中英

使用接口時對vtable的未定義引用

[英]undefined reference to vtable when using interface

我環顧四周,我無法弄清楚哪里出了問題,因為我在使用接口時似乎遵循正確的約定,但也許我忽略了某些事情。 我得到的確切錯誤是:

未定義對“ vtable for Icommand”的引用

我才剛剛開始將我的類和類聲明分成單獨的頭文件,所以也許我在某處缺少了預處理指令。

main.cpp中:

#include <iostream>
#include <string>
#include <cstdlib>
#include "Icommand.h"

#include "Command.h"

using namespace std;

void pause();

int main(){


    Icommand *run = new Command("TEST");
    cout << run->getCommand() << endl;
    delete run;

    pause();
}

void pause(){
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get();
}

Icommand.h:

#ifndef ICOMMAND_H
#define ICOMMAND_H

#include <string>
#include <vector>


class Icommand
{
    private:

    public:
        Icommand(){}
        virtual ~Icommand(){}
        virtual bool run(std::string object1) = 0;
        virtual bool run(std::string object1, std::string object2) = 0;
        virtual std::string getCommand() const;
};



#endif // ICOMMAND_H

Command.h:

#ifndef COMMAND_H
#define COMMAND_H

#include <string>
#include <vector>

#include "Icommand.h"

class Command : public Icommand {

    private:
        std::string command;
        std::vector<std::string> synonymns;
        Command(); // private so class much be instantiated with a command

    public:
        Command(std::string command) : command(command){}
        ~Command(){}
        bool run(std::string object1);
        bool run(std::string object1, std::string object2);
        std::string getCommand() const;


};
#endif // COMMAND_H

Command.cpp:

#include <string>
#include <vector>

#include "Command.h"

bool Command::run(std::string object1){
    return false;
}
bool Command::run(std::string object1, std::string object2){
    return false;
}
std::string Command::getCommand() const {return command;}

在Icommand.h中,替換

virtual std::string getCommand() const;

virtual std::string getCommand() const = 0;

使它成為純虛擬的。 然后,編譯器可以為Icommand生成一個vtable。 或者,實現Icommand::getCommand

暫無
暫無

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

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