Ошибка конструктора умного указателя - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь понять использование умных указателей. В приведенном ниже примере я намерен Класс B должен быть умным указателем на класс A. Я получаю следующую ошибку компоновщика

error LNK2019: unresolved external symbol "public: __thiscall ClassB::ClassB(classA *)"

Кажется, мне что-то не хватает в конструкторе. Мне не ясно, что нужно передать из класса A в конструктор. Буду признателен, если кто-нибудь сможет объяснить.

 class A 
    {

     friend  class B;
    virtual methods ();

    protected:
    virtual ~A();

    }

    class B:public QSharedPointer<A>
    {
       B();
       B(A * pData);
       B(const  B &data);
      virtual ~  B();

    }

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Ошибка, которую вы получаете, является ошибкой компоновщика, а не ошибкой компилятора, которая возникает (среди других случаев), когда вы создаете прототип функции, но не реализуете ее.Вы предоставили реализацию для вашего B::B(A*) конструктора?Если да, вы скомпилировали и соединили его с полученным исполняемым файлом?Если notot, это объясняет ответ на любой вопрос «нет», тогда вы легко сможете это исправить, предоставив и связав реализацию.

0 голосов
/ 23 марта 2011

Если вы просто пытаетесь использовать умный указатель, тогда не следует пытаться унаследовать от QSharedPointer вам что-то вроде

QSharedPointer<A> ptr(new A());
ptr->do_something();

Если вы пытаетесь реализовать свой собственный умный указатель, то вы все равно, скорее всего,не хотеть наследовать от какого-то другого умного указателя класса.Вы можете взглянуть на улучшенную реализацию scoped_pointer для довольно простой для понимания реализации базового интеллектуального указателя.

...