0

私は非常に単純なコードを持っています:

#include <iostream>
#include <string>

class A
{
    public :

            A(){}
            virtual void fun(std::string);
            virtual ~A(){}
};

class B : public A
{
    public :

            B(){}
            void fun(std::string);
            ~B(){};
};

void B::fun(std::string)
{

}

int main()
{
    A a;
    return 0;
}

そして、私はそれをコンパイルしようとしてこのメ​​ッセージを受け取りました:

/home/Temp/test.o || A::A()':| test.cpp:(.text._ZN1AC2Ev[_ZN1AC5Ev]+0x8)||undefined reference to A'の関数vtable内| /home/Temp/test.o || A::~A()':| test.cpp:(.text._ZN1AD2Ev[_ZN1AD5Ev]+0xb)||undefined reference to A'の関数vtable内| /home/Temp/test.o:(.rodata._ZTI1B [typeinfo for B] + 0x8)|| `typeinfoforA'への未定義の参照| || ===ビルドが完了しました:3つのエラー、0の警告=== |

何故ですか?

4

2 に答える 2

4

実装するのを忘れましたA::fun

仮想関数を実装したくない場合は、で純粋としてマークし= 0ますが、クラスが抽象化され、インスタンス化できないことに注意してください。

于 2013-02-08T13:47:13.467 に答える
2

実装するA::funか、以下を使用して純粋な仮想として示します= 0

virtual void fun(std::string) = 0;

それでも、純粋な仮想の場合、メインfunでインスタンス化することはできないことに注意してください。A

于 2013-02-08T13:48:20.393 に答える