Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с перезагрузкой operator <<  (Прочитано 9939 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bebabo
Помогающий

ru
Offline Offline

WWW
« : 02-04-2007 07:58 » 

проблема в следующем - хочу перезагрузить оператор << для класса в win32-приложении, чтобы реализовать таким образом сохрание в файл некоторых данных.
вставляю в класс
friend ostream& operator << (ostream& s, fighter& f);

далее описываю перезагруженный оператор

ostream& operator << (ostream& s, fighter& f)
{
   s << f.f_position.x << f.f_position.y << f.life;
   return s;
}

подключаю #include <fstream>

пытаюсь компилировать и получаю 2 ошибки

libcpd.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __CrtDbgReport
Debug/crane.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-04-2007 09:26 » 

bebabo, ошибка к перегрузке отношения не имеет - это ошибка линковки. Ты какую-то библиотеку не указал.  Судя по префиксу "__Crt", это run-time библиотека. Возможно что-то не то с debug/release. См. настройки проекта.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #2 : 02-04-2007 10:08 » 

bebabo, ошибка к перегрузке отношения не имеет - это ошибка линковки. Ты какую-то библиотеку не указал.  Судя по префиксу "__Crt", это run-time библиотека. Возможно что-то не то с debug/release. См. настройки проекта.
прежде чем полезть в настройки, попробовал запустить как release. предыдущие ошибки пропали, теперь новая
error C2593: 'operator <<' is ambiguous
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 02-04-2007 15:43 » 

Я прогнал у себя наподобие твоего кода
Код:
#include <iostream.h>

struct Point
{
int x;
int y;
Point() {x=0; y=0;}
};

class Prob
{
friend ostream &operator <<(ostream &, const Prob &);
public:
Prob();
void setPoint(Point pt);
void setPoint(int x, int y);
~Prob();
protected:
Point pt;

};


ostream &operator <<(ostream & output, const Prob & pr)
{
output << "X= " << pr.pt.x <<" Y=" << pr.pt.y <<" ";
return output;
}

void Prob::setPoint(Point pt)
{
this->pt.x=pt.x;
this->pt.y=pt.y;
}

void Prob::setPoint(int x, int y)
{
pt.x=x;
pt.y=y;
}

Prob::~Prob()
{
}

Prob::Prob()
{
}

int main()
{
Prob prob;
prob.setPoint(10,20);
cout << prob<< endl;
return 0;
}
У меня все компилируется и работает нормально. Так что скорее всего проблемы в настройке самого компилятора и линкера. Какая версия кстати?

P.s. Заглянул сюда http://support.microsoft.com/kb/168440
И получил
Цитата
You may receive an "error C2593: 'operator <<' is ambiguous" error message when you try to pass an __int64 variable to the ostream operator <<
Признавайся Улыбаюсь Используеш ли int64?
« Последнее редактирование: 02-04-2007 15:53 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #4 : 03-04-2007 07:02 » 

RXL, Finch, вы были правы - дело действительно в настройках. вчера, решил отложить перезагрузку и реализовать сохрание данных другим путем, просто открыть файл и записать (как уже частенько делал до этого). получил ту же ошибку. тогда открыл другой проект, где использовал запись в файл и стал сравнивать настройки. отличия нашел в разделе С/С++ Project Options. в старом проекте, где все получалось было так:
/G6 /MLd /WX /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
в новом так:
/G6 /ML /GX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
честно говоря, не знаю что это, но скопировал в новый проект настройки старого и все заработало. только теперь при  выходе из программы вылетают страшные ошибки Debug Assertion Failed!
Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #5 : 03-04-2007 07:15 » new

сейчас стал искать причину новых ошибок при выходе из приложения.
если возвращаю ML - ошибок при  выходе нет, но возвращается преждняя ошибка с перезагрузкой. ставлю MLd - перезагрузка проходит нормально, но...
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines