2010-09-01 206 views
1
#include <iostream> 
#include <fstream> 

class obj 
{ 
public: 
int i; 
friend ostream& operator<<(ostream& stream, obj o); 
} 

void main() 
{ 
obj o; 
ofstream fout("data.txt"); 
fout<<o; 
fout.close(); 
} 

這是我的代碼,正在出錯。 錯誤:ostream:含糊不清的符號。運算符<< C++中的超載

任何人都可以幫助我。

回答

2

你沒有使用命名空間標準(使用命名空間標準是習慣無論如何),所以編譯器不知道什麼是一個ostream是在地球上。除此之外,你沒有實際定義運營商< <,只聲明它,即使它承認它,它也不會知道該做什麼,因爲你沒有告訴它。

+0

但爲什麼'曖昧'符號? – Chubsdad 2010-09-01 14:55:46

0

ofstream在命名空間std,所以你需要聲明fout這樣的:

std::ofstream fout("data.txt"); 

我會認爲你只是忽略你的運營商< <功能簡單的定義。顯然,你需要爲你的下一行編寫該函數的主體。

3

您需要指定命名空間。 - 前綴ostreamstdstd::ostream

此外,你應該通過常量引用運營商通過obj類型:

friend ostream& operator<<(ostream& stream, const obj& o); 
0

ostream的是的std ::命名空間中的一員,所以要麼把using namespace std;前您的班級聲明或明確提及std::ostream

+0

'使用std :: ostream;'是另一種可能性。 – 2010-09-01 13:27:12

1

當我看到它,你需要

  • 添加

    using std::ostream;
    using std::ofstream;

  • 添加;類聲明
  • Povide爲< <運營商實現了。

你到底應該結束了,像這樣:

#include <iostream> 
#include <fstream> 

using std::ostream; 
using std::ofstream; 

class obj 
{ 
public: 
int i; 
friend ostream& operator<<(ostream& stream, const obj& o); 
}; 

ostream& operator<<(ostream& stream, const obj& o) 
{ 
    std::cout << o.i; 
    return stream; 
} 

int main() 
{ 
    obj o; 
    ofstream fout("data.txt"); 
    fout << o; 
    fout.close(); 
} 
0

考慮通過你的對象中另有一個新的obj對象將通過拷貝構造函數每次創建一個參考。

friend ostream& operator<<(ostream& stream, obj& o);