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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заголовочные файлы и наследование 
:(
    Опции темы
initrd
Дата 8.12.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.12.2007

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



Всем привет.

Имеется:

test.h
Код

.............
#include "sort.h"
#include "qsort.h"

class Test{
public:
    Sort *Sorter;    
    string SortName;
.......................
public:
    Test(string, long);
.............
};


test.cpp
Код

Test::Test(string str, long n)
{    
    if(str=="q"){
        Sorter = new QSort();
        SortName = "Quick";
    }
..................
}
................


sort.h
Код

class Sort{
public:
    virtual void SortIt(long*,long);
protected:
    void change(long& a, long& b){
        int c;
        c=a;
        a=b;
        b=c;
    }
};


qsort.h
Код

#include "sort.h"

class QSort : public Sort
{
public:
    void SortIt(long*,long);
};


Код

#include "qsort.h"

void QSort::SortIt(long* a,long N){
..........................
}


В общем, проблема такая. При компиляции этого кода вылезают две ошибки:
redefinition of ‘class Sort’
previous definition of ‘class Sort’

Если же в файле test.h закомментировать подключение qsort.h, то конструктор Test не видит класс QSort:
expected type-specifier before ‘QSort’

Вроде бы все верно, может я не совсем понимаю принципа подключения заголовочных файлов?
Все делается в KDevelop.



PM MAIL   Вверх
Daevaorn
Дата 8.12.2007, 15:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



PM MAIL WWW   Вверх
initrd
Дата 8.12.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.12.2007

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



Сделал так:

Код

#ifndef __SORT
#define __SORT
class Sort{
public:
    virtual void SortIt(long*,long);
protected:
    void change(long& a, long& b){
        int c;
        c=a;
        a=b;
        b=c;
    }
};
#endif


Теперь подключаются заголовки только наследуемых классов:
test.h
Код

#include "qsort.h"
#include "bsort.h"
#include "vsort.h"


Выскакивают ошибки:
bsort.o:(.rodata._ZTI5BSort[typeinfo for BSort]+0x8): undefined reference to `typeinfo for Sort'
qsort.o:(.rodata._ZTI5QSort[typeinfo for QSort]+0x8): undefined reference to `typeinfo for Sort'
/programming/C++/lab3/src/sort.h:4: undefined reference to `vtable for Sort'
vsort.o:(.rodata._ZTI5VSort[typeinfo for VSort]+0x8): undefined reference to `typeinfo for Sort'

PM MAIL   Вверх
JackYF
Дата 8.12.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(initrd @  8.12.2007,  15:08 Найти цитируемый пост)
virtual void SortIt(long*,long);

если ты не определяешь Sort::SortIt, то сделай

Код

virtual void SortIt(long*,long) = 0;



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
initrd
Дата 8.12.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.12.2007

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



Помогло.
Всем спасибо!
PM MAIL   Вверх
JackYF
Дата 9.12.2007, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



initrd, пометь тему решённой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0808 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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