0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 14
|
||||||
1 | ||||||
Link error на inline функцию01.09.2010, 12:08. Показов 2480. Ответов 9
Метки нет (Все метки)
Почему выдает ошибку [Linker error] undefined reference to `OldCat::GetAge() const'
на inline ф-цию при ее вызове? Убираю inline, все компилится нормально. Функция простая:
среда Dev-C++ v4.9.9.2 (на базе minGW, на сколько я понимаю) компилятор gcc 3.4.2 (mingw-special)
0
|
01.09.2010, 12:08 | |
Ответы с готовыми решениями:
9
Причина ошибки [ilink32 Error] Error: Unable to perform link 1>LINK : fatal error LNK1000: Internal error during IncrBuildImage [ilink32 Error] Error: Unable to perform link C++ Builder [ILINK32 Error] Error: Unable to perform link |
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 14
|
||||||
01.09.2010, 12:12 [ТС] | 3 | |||||
разницы нет..
даже если в определении класса напрямую пишу:
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.09.2010, 12:18 | 4 |
nimoid, покажи весь код.
0
|
01.09.2010, 12:24 | 5 | |||||
0
|
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 14
|
||||||||||||||||
01.09.2010, 12:46 [ТС] | 6 | |||||||||||||||
fasked, странно, в книжке у Либерти наоборот inline в реализации функции стоит, а не в объявлении класса.. Но, впрочем, так тоже ошибку выдает.
Полный код: main.cpp
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||
01.09.2010, 13:11 | 7 | |||||||||||||||
Не по теме: Открывать пространство имен в заголовочном файле - плохо. Надо использовать для заголовочных файлов связку #ifndef-#define-#endif или, в крайнем случае, #pragma once Теперь по теме: встроенные функции должны быть определены внутри заголовочного файла. Также рекомендуется ставить спецификатор inline у определения, а не у объявления метода. Переделанная версия: Cats.hpp:
Не по теме: Поле itsLapok было неиспользовано, поэтому я его удалил
0
|
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 14
|
|
01.09.2010, 13:16 [ТС] | 8 |
1. А где пространство имен открывать?
2. Покажите пожалуйста пример #ifndef-#define-#endif , я еще до этого не дошел по ходу Вообще лучше можете привести пример как правильно надо это все организовать (с такой структурой как у меня) с дефайнами и с пространствами имен? Если не сложно, конечно.. Добавлено через 46 секунд о, спасибо, уже опередили )
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
01.09.2010, 13:29 | 9 |
Лучше его вообще не открывать, а явно уточнять используемое пространство имен перед идентификатором (например, std::cout)
Тут нужно сделать небольшое отступление и рассказать, как производится обработка директивы include. Перед компиляцией программы препроцессор просматривает файлы и, когда натыкается на директиву #include, производит подстановку на место директивы всего содержимого файла, указанного в директиве (предварительно удалив комментарии и подставив #define'ы). Так вот, в крупных проектах может случиться так, что некоторые заголовочные файлы должны подключаться несколько раз (да и при использовании стандарной библиотеки, см. пример выше - iostream подключается в файле main.cpp и cats.hpp). Если не использовать связку #ifndef-#define-#endif, то получается, что препроцессор вставит содержимое заголовочного файла два (или больше) раза подряд, что будет ошибкой повторного определения классов, функций и т.д., описанных в этом заголовочном файле. А так во время первого подключения заголовочного файла происходит определение символа (#define CATS_HPP), которое заставляет препроцессор пропускать следующие подключения этого файла. Вместо всего этого (#ifnef-#define-#endif) можно было бы один раз прописать в начале заголовочного файла #pragma once, но вся беда в том, что эта директива поддерживается не всеми компиляторами. Можешь прочитать faq для окончательного просветления
1
|
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 14
|
|
01.09.2010, 13:40 [ТС] | 10 |
Спасибо большое за разъяснения, все понял
0
|
01.09.2010, 13:40 | |
01.09.2010, 13:40 | |
Помогаю со студенческими работами здесь
10
[ilink32 Error] Error: Unable to perform link [LINK Error] Error: Unresolved external - C++ [LINK Error] Error: Unresolved external Определение тактовой частоты. Еrror C2400: inline assembler syntax error in 'opcode' Не получается создать inline функцию Linker не находит inline функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |