Изменение определений - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь восстановить какое-то старое программное обеспечение, но проблема в том, что программное обеспечение было написано в 2003 году с MC, и файлы Iostream Header для Windows изменились с того времени iostream.h до iostream.

Так что этоПрограммное обеспечение имело библиотеку трехмерных матриц, которая имела функцию, подобную этой

friend ostream& operator<< (ostream&, const CMatrix3D<T>&);

, эта функция была более не совместима с iostream, поэтому я изменил ее на:

friend bool operator<< (std::ostream&, const CMatrix3D<T>&);

, но теперь в одинместо, где эта функция была ранее вызвана как:

friend ostream& operator << (ostream& os, block* bl)
{
vec_3d p1 = bl->points[0]->value();
vec_3d p2 = bl->points[6]->value();
os << "Diagonal points: " << p1 << " " << p2;
return os;

}

, а затем я изменил ее на:

friend bool operator << (std::ostream& os, block* bl)
{
vec_3d p1 = bl->points[0]->value();
vec_3d p2 = bl->points[6]->value();
os << "Diagonal points: " << p1 << " " << p2;
return os;
}

, сообщая мне следующие ошибки:

error C2297: '<<' : illegal, right operand has type 'const char [2]'

error C2678: binary '<<' : no operator found which takes a left-hand
operand of type 'int' (or there is no acceptable conversion)

Может кто-топредложить мне выход?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Причина, по которой operator<< в ostreams имеет тип возврата ostream&, заключается в том, что его можно объединить в цепочку для вызова, как показано в ваших примерах реализации:

os << "Diagonal points: " << p1 << " " << p2;

Это стандартное поведение этого оператора, и большая часть кода будет полагаться на него, поэтому плохая идея, чтобы он возвращал что-то еще, например bool, на который вы его изменили. Всегда должно возвращаться std::ostream&.

Это должно исправить хотя бы некоторые твои проблемы. Непонятно, не увидев остальную часть вашего кода и не зная точно, на какую строку жалуется компилятор, является ли это всей проблемой или нет.

0 голосов
/ 10 февраля 2012

Чтобы удалить пробелы из потока ввода в эти дни, вы используете манипулятор ввода std::ws. т.е.

fp >> ws;

Ссылка MSDN для std :: ws .

...