2012-02-09 36 views
0

我試圖恢復一些舊的軟件,但問題是該軟件是在2003年用MC和Windows編寫的,Iostream頭文件已從iostream.h更改爲iostream定義更改

那麼這個軟件有一個三維矩陣庫其中有功能類似這樣

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

這個功能是沒有更多的compatable與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; 

} 

和th恩我把它改爲:

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) 

可有人建議我一條生路?

+0

你用原始函數定義得到了什麼錯誤? – 2012-02-09 06:30:07

+0

爲什麼你將'<<'運算符的返回類型更改爲'bool'?無論其他問題如何,單單這一改變都會破壞代碼。 – AnT 2012-02-10 00:22:07

+1

如果你有更新你的問題,請編輯你的問題,不要發佈「答案」。如果您有其他問題,請提出另一個問題,請勿發佈「答案」。 – 2012-02-10 07:29:26

回答

1

的原因,是在ostreams的operator<<ostream&一個返回類型,以便它可以被鏈接,在您的示例實現顯示來電:

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

這是運營商的標準行爲,並且很多代碼都會依賴它,所以將其返回給其他人,比如您將其更改爲bool是個不錯的主意。它應該總是返回std::ostream&

這應該至少解決一些問題。沒有看到代碼的其餘部分,並且確切知道編譯器是在抱怨哪一行,不管這是否是所有問題都不清楚。

+1

他還需要vec_3d的<<運算符,它應該採用const vec_3d&(現在可能是非const)。 – dbrank0 2012-02-09 07:21:11

+0

是的,我試過這個東西,它的工作,現在新的錯誤來了 – 2012-02-09 22:20:30

0

要從輸入流中移除空格,最近使用了輸入操縱器std::ws。 即

fp >> ws; 

MSDN Reference for std::ws

+0

沒有它的不工作,因爲fp已經定義了fsteam(在第一行) – 2012-02-09 22:38:12

+0

我不知道我理解你的評論 - 我發佈的片段isn重新定義fp;它只是在讀取和丟棄空白字符的表達式中使用它。 – aalpern 2012-02-09 22:52:00

+0

工作..謝謝你.. – 2012-02-10 00:17:56