Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: :-1: error: collect2: ld returned 1 exit status
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
ЙаМайскЫйПчОЛ
Доброго времени суток...
Товарищи, собратья по КуТэ... вопрос не совсем в КуТэ но я пишу под QtSDK
НЕ ПОНИМАЮ В ЧЕМ ОШИБКА!!!!
ОБЪЯСНИТЕ ПОЖАЛУЙСТА!!!!
Заранее извиняюсь за название классов , но они отражают суть проблеммы... и мое к ней отношение
вот хедер
CODE
#ifndef ZAELO_H
#define ZAELO_H

template <class C>
class Zaelo
{
public:
virtual ~Zaelo();

protected:
Zaelo(int a = 0);

private:
int a_;

};

template <class C>
class Ox : public Zaelo<C>
{
public:
Ox(int a = 0);
virtual ~Ox();

};



#endif // ZAELO_H


вот cpp
CODE
#include "Zaelo.h"

template <class C>
Zaelo<C>::Zaelo(int a)
: a_(a)
{
}

template <class C>
Zaelo<C>::~Zaelo()
{
}

template <class C>
Ox<C>::Ox(int a)
: Zaelo<C>(a)
{
}

template <class C>
Ox<C>::~Ox()
{
}


а это main
CODE
#include <QtCore/QCoreApplication>
#include "Zaelo.h"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Ox<int> b;
return a.exec();
}

так вот эта штука выдает при компиляции
C:/PROJECTS/Zaebalo/main.cpp:7: undefined reference to `Ox<int>::Ox(int)'
C:/PROJECTS/Zaebalo/main.cpp:8: undefined reference to `Ox<int>::~Ox()'
C:/PROJECTS/Zaebalo/main.cpp:8: undefined reference to `Ox<int>::~Ox()'
:-1: error: collect2: ld returned 1 exit status

внимание знатоки... вопрос ... "ПОЧЕМУ"
если перенести код из cpp в h то все работает, если написать inline функции в хедере то тоже работает..
ПОЖАЛУЙСТА ОБЪЯСНИТЕ ПОЧЕМУ

П.С. это искренний крик души
П.С.С. толи лыжи не едут... толи я увлекся проектированием вместо кодинга...
BRE
Цитата(ЙаМайскЫйПчОЛ @ 14.10.2009, 20:12) *
ПОЖАЛУЙСТА ОБЪЯСНИТЕ ПОЧЕМУ

П.С. это искренний крик души
П.С.С. толи лыжи не едут... толи я увлекся проектированием вместо кодинга...

Потому что это шаблоны. Все нормально. ;)
Почитай про них.
ЙаМайскЫйПчОЛ
я в очередной раз перечитываю страуструпа, но ни%№@ не вижу...
BRE
Цитата(ЙаМайскЫйПчОЛ @ 14.10.2009, 20:24) *
я в очередной раз перечитываю страуструпа, но ни%№@ не вижу...

http://www.codeguru.com/forum/showthread.php?t=250284
ЙаМайскЫйПчОЛ
BRE, товарищь а на ваш взгляд какой способ корректней...
и есть ли подобное описание у авторов типа Шилдта и страуструпа???
AD
Цитата(ЙаМайскЫйПчОЛ @ 14.10.2009, 20:50) *
BRE, товарищь а на ваш взгляд какой способ корректней...
и есть ли подобное описание у авторов типа Шилдта и страуструпа???

Кода с шаблонами полно у Саттера и у Александреску. Если ничего не путаю, то Саттер предпочитал описывать через inline, а затем писать реализацию. У Александреску - вроде бы наоборот - все пишется в h-файле! Решай сам! :) Можешь найти и почитать Саттера и Александреску! Сложно посоветовать - как больше нравится....
ЙаМайскЫйПчОЛ
Я еле осилил одну главу александрески)), пока не для моего мозга
хотя давно было надо попробовать ещё заход...
Спасибо, за быстрый ответ буду искать Саттера
BRE
Цитата(ЙаМайскЫйПчОЛ @ 14.10.2009, 20:50) *
BRE, товарищь а на ваш взгляд какой способ корректней...

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

Цитата(ЙаМайскЫйПчОЛ @ 14.10.2009, 20:50) *
и есть ли подобное описание у авторов типа Шилдта и страуструпа???

Не знаю, стандарты и реальные компиляторы C++ это, так сказать, не одно и тоже. :)
Поэтому, по стандарту есть, а в каком то компиляторе может не оказаться.
Litkevich Yuriy
ЙаМайскЫйПчОЛ, напишешь в форуме ещё такой код - получишь красную карточку
DIMEDROLL
Какой компилятор?
Ответ прост, им не поддерживается такая компиляция когда описание шаблона в хедере, а реализация в срр.
Я со студией тоже так когда то мучался :)
Знаю что какой то последний компилятор поддерживает такую компиляцию, непомню только название.
...Браузнул, Comeau, насколько я помню. Он же и больше всего соответсвует стандарту, но не бесплатен.
Выход: пиши реализацию в хедере
ЙаМайскЫйПчОЛ
Litkevich Yuriy, Что не так с кодом??? Нарушил Венгерскую нотацию???
Дети спали и не видели.. все пофиксил.
в дальнейшем учту, что вы сторонник другой нотации менее эмоциональной.
Но прошу заметить, только вы были оскорблены, между тем Ваш камиент не по существу, подобное можно и нужно делать в личке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.