Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DartLenin
36 / 36 / 2
Регистрация: 24.05.2009
Сообщений: 178
#1

Ошибка линкера - C++

06.01.2012, 16:39. Просмотров 456. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
using namespace std;
template <class T>
class A
{
    T i;
public:
    friend ofstream& operator<<(ofstream& str,A<T>& a);
};
template <class T>
ofstream& operator<<(ofstream& str,A<T>& a)
{
    str<<a.i;
    return str;
}
void main()
{
    A<int> a;
    ofstream out("output.txt");
    out<<a;
}
Выдает такую ошибку:
1>Main.obj : error LNK2019: unresolved external symbol "class std::basic_ofstream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ofstream<char,struct std::char_traits<char> > &,class A<int> &)" (??6@YAAAV?$basic_ofstream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$A@H@@@Z) referenced in function _main
Если перенести определение дружественной функции в тело класса, то все ок. Почему так? Я что то пишу не так или так вообще нельзя?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2012, 16:39     Ошибка линкера
Посмотрите здесь:

C++ Подправте, пожалуйста, ошибки линкера (MVS2008) !
C++ Ошибка линкера: indefined reference to 'EnumPrintersW@28'
C++ Ошибка линкера
C++ Ошибка линкера
Шаблоны. Ошибка линкера C++
Ошибка линкера или что не так с libcurl C++
C++ Командная строка линкера

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
06.01.2012, 16:44     Ошибка линкера #2
namespace
DartLenin
36 / 36 / 2
Регистрация: 24.05.2009
Сообщений: 178
06.01.2012, 22:16  [ТС]     Ошибка линкера #3
Цитата Сообщение от NoMasters Посмотреть сообщение
namespace
Не понял Что не так с namespace?
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
06.01.2012, 22:28     Ошибка линкера #4
Извиняюсь. Ему не нравится, что дружественная функция описывается вне того же шаблона.

Добавлено через 45 секунд
У g++ куда более адекватный вывод:
vel.c:8:51: предупреждение: friend declaration «std::ofstream& operator<<(std::ofstream&, A<T>&)» declares a non-template function [-Wnon-template-friend]
vel.c:8:51: замечание: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
vel.c:16:11: ошибка: «::main» должна возвращать «int»
Yandex
Объявления
06.01.2012, 22:28     Ошибка линкера
Ответ Создать тему
Опции темы

Текущее время: 23:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru