1

重複の可能性:
vtable への未定義の参照

次のコードを実行するとリンカー エラーが発生する

'undefined reference to vtable for ManagedObjects'

#include <cstdlib>
#include <iostream>
#include <list>
#include <string>
using namespace std;

class ManagedObjects
{
      public:
      virtual string get() const;
      virtual ~ManagedObjects(){};
};

class CallbackOwner1 : public ManagedObjects
{
public:
       string get() const {return "CallbackOwner1";} 
};

class CallbackFunctor
{
public:
    CallbackFunctor(const ManagedObjects* b):m_cbr(b)
    {}
    string operator() ()
    {
        return m_cbr->get();
    }

   const ManagedObjects* m_cbr;
};

int main(int argc, char *argv[])
{
    ManagedObjects* cb1 = new CallbackOwner1();
    CallbackFunctor f(cb1);
    cout << f() << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
4

1 に答える 1

2

virtual string ManagedObjects::get() constメソッドをどこにも定義しません。純粋仮想関数として定義するかvirtual string get() const = 0;、宣言を提供してください。

于 2012-12-16T17:11:37.650 に答える