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

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

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

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

06.01.2012, 16:39. Просмотров 470. Ответов 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++
Здравствуйте! Подскажите пожалуйста в чем здесь дело? Объявил extern указатели в файле .h, а использую в main.cpp, и компилятор постоянно...

Ошибка линкера - C++
Здравствуйте!!! Подскажите пожалуйста почему возникают ошибки линкера? // main.cpp #include &quot;parser.h&quot; int main() { ...

Шаблоны. Ошибка линкера - C++
Доброго времени суток, уважаемые форумчане! Начал постигать дзен шаблонов С++. Собственно задача сделать класс-шаблон &quot;Матрица&quot; с...

Ошибка линкера: indefined reference to 'EnumPrintersW@28' - C++
Доброго времени суток! Не могу понять из-за чего выскакивает эта ошибка, ведь я подключил стандартные заголовочные файлы, содержащие...

Ошибка линкера или что не так с libcurl - C++
Привет всем! Установил libcurl по этому мануалу. Но при компиляции следующая ошибка: Подскажите, что делать? Добавлено через...

Командная строка линкера - C++
Вообщем изучаю (пытаюсь изучать) сокеты на MV c++. Из мануала: перейти к закладке &quot;Link&quot; и к списку библиотек, перечисленных в строке...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,121
06.01.2012, 16:44     Ошибка линкера #2
namespace
DartLenin
36 / 36 / 2
Регистрация: 24.05.2009
Сообщений: 178
06.01.2012, 22:16  [ТС]     Ошибка линкера #3
Цитата Сообщение от NoMasters Посмотреть сообщение
namespace
Не понял Что не так с namespace?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2012, 22:28     Ошибка линкера
Еще ссылки по теме:

Подправте, пожалуйста, ошибки линкера (MVS2008) ! - C++
из-за ошибок не собрать проект в release. видимо, связано с объявлением и определением функций но вот не разобраться: 1&gt;man.obj :...

Ошибка линкера - Assembler
Здравствуйте. Написал первую программу на ассемблере, &quot;Hello, world&quot;. CSEG segment org 100h Begin: mov ah,9 mov dx, offset...

Ошибка линкера - C++ WinAPI
Программа должна демонстрировать использование простого меню #include&lt;windows.h&gt; #include&lt;commctrl.h&gt; #pragma comment(lib,...

ошибка линкера Builder C++ 6.0 - C++ Builder
Линковка проекта завершается с ошибкой object file name.xxx is missing a section of class 0. Однако компиляция и линк этого-же проекта...


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

Или воспользуйтесь поиском по форуму:
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,121
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     Ошибка линкера
Ответ Создать тему
Опции темы

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