Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создаю объект от потомка абстрактного класса, получаю две ошибки линкера 
:(
    Опции темы
Royan
Дата 9.3.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Кто-нибудь может объяснить, что я делаю не так?

Header:
Код

class CMyBase {
private: 
    CMyBase(const CMyBase& obj);        /* Disable copy constuctor */
    void operator=(const CMyBase& obj); /* Disable assignment operator */
protected:
    CMyBase();
public:
    virtual ~CMyBase()=0;

};

class CMyChild : public CMyBase {
public:
    CMyChild();
    void close();
    ~CMyChild();
private:
    int temp;
};


Source
Код

#include "main.h"

CMyChild::CMyChild()
    : temp (0)
{

}

CMyChild::~CMyChild() {
    close();
}

void CMyChild::close() throw() {
    temp = 100;
}


int main(int argc, char **argv) 
{
    CMyChild child;
    child.close();
}


получаю две ошибки:

main.obj : error LNK2019: unresolved external symbol "protected: __thiscall CMyBase::CMyBase(void)" (??0CMyBase@@IAE@XZ) referenced in function "public: __thiscall CMyChild::CMyChild(void)" (??0CMyChild@@QAE@XZ)

main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CMyBase::~CMyBase(void)" (??1CMyBase@@UAE@XZ) referenced in function "public: virtual __thiscall CMyChild::~CMyChild(void)" (??1CMyChild@@UAE@XZ)




--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
MAKCim
Дата 9.3.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



1. в объявлении void close в классе тоже нужно thow() поставить
2. не описан конструктор CMyBase
3. тело чисто виртуального деструктора CMyBase должно обязательно быть (даже если пустое) и описано вне класса
Код

class CMyBase {
private: 
    CMyBase(const CMyBase& obj);        /* Disable copy constuctor */
    void operator=(const CMyBase& obj); /* Disable assignment operator */
protected:
    CMyBase();
public:
    virtual ~CMyBase()=0;
};
class CMyChild : public CMyBase {
public:
    CMyChild();
    void close() throw();
    ~CMyChild();
private:
    int temp;
};

Код

#include "main.h"
CMyBase::~CMyBase() {}
CMyBase::CMyBase() {}

CMyChild::CMyChild()
    : temp (0)
{
}
CMyChild::~CMyChild() {
    close();
}
void CMyChild::close() throw() {
    temp = 100;
}
int main(int argc, char **argv) 
{
    CMyChild child;
    child.close();
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Royan
Дата 9.3.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Спасибо. Именно так у меня и было ранее сделано, однако все же не ясно почему именно я должен имплементировать конструктор и деструктор абстрактного класса. На то он собственно и абстрактный, чтобы в нем ничего не было.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Daevaorn
Дата 9.3.2006, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Royan,
В принципе ты даже можешь написать реализацию для абстрактных методов и это иногда бывает нужно. Поэтому не надо уж так принижать абстрактные базовые классыsmile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.