| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Undefined symbols for architecture x86_64 |
| Автор: trinitr0 6.11.2014, 10:14 | ||
| Разбираюсь с шаблонами. Разбирал пример учебника:
Приводит к такой ошибке: Undefined symbols for architecture x86_64: "operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Array<int>&)", referenced from: _main in Template-f49012.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) В чём может быть дело? |
| Автор: borisbn 6.11.2014, 14:35 | ||||||
Объявление оператора
д.б. шаблонным
А сама функция должна возвращать output
http://ideone.com/M8ctAj |
| Автор: trinitr0 6.11.2014, 16:42 | ||
Добавив -
сработало! Спасибо! У автора как раз этой строчки и нет... а что значит "д.б. шаблонным" ? |
| Автор: borisbn 6.11.2014, 16:44 |
| д.б. == должно быть |
| Автор: trinitr0 6.11.2014, 17:13 |
| Это недочёт автора? Или устаривание книги? |
| Автор: borisbn 6.11.2014, 17:15 |
| Скорее всего недочёт автора. Он, похоже, писал не по стандарту, а просто проверял на компиляторе, который не очень строго подходил к стандарту. У него, скорее всего, работало. |
| Автор: trinitr0 6.11.2014, 17:49 |
| Ясно! Ещё раз спасибо! |
| Автор: math64 7.11.2014, 11:05 |
| Здесь вообще объявлять operator<< другом не обязательно - он использует только public методы класса Array. |
| Автор: trinitr0 9.11.2014, 22:56 |
| math64 спасибо за дополнение, но тема как раз называлась: "Дружественный класс или функция как общий шаблон" |
| Автор: Alca 11.11.2014, 10:41 | ||
http://ideone.com/ZerZBl |
| Автор: borisbn 11.11.2014, 10:59 |
| Alca, ну да. В этом случае operator<< является членом класса Array. Чтобы убрать friend нужно вообще убрать всё упоминание об этом операторе из Array. |