2009-11-11 106 views
3

我有一個類,我試圖超載運算符< <。出於某種原因,它沒有被超載。在C++中重載插入運算符

這裏是我的.h文件:

friend std::ostream& operator<<(std::ostream&, const course &); //course is my class object name 
在我的.cpp

,我有這個作爲我的實現:

std::ostream& operator<<(std::ostream &out, const course & rhs){ 
    out << rhs.info; 
    return out; 
} 

這應該是正確的,但是當我嘗試編譯它,它說cout < < tmp;沒有在ostream中定義。

我在我的.cpp包含的iostream和.h

我一直拉我的頭髮試圖弄清楚這一點。你能看到這有什麼不對嗎?

編輯: 因爲我在做什麼似乎是正確的,這裏是我的全部源代碼:http://pastebin.com/f5b523770

線46是我的原型

線377是實施

線435是我試圖編譯它時失敗的地方。

也是,我只是想編譯它另一臺機器上,它給這個錯誤,而不是:

course.cpp:246: error: non-member function 'std::ostream& operator<<(std::ostream&, const course&)' cannot have cv-qualifier 
make: *** [course.o] Error 1 
+1

從一眼,cv-qualifier錯誤只是因爲你有函數設置爲常量在行377。 – goldPseudo 2009-11-11 01:55:57

回答

1

你應該包括代碼的其餘部分,我不認爲我們可以看到問題的所在。

下面的小例子工程:

class course 
{ 
public: 
    course(int info) : info(info) { } 
    int info; 

    friend std::ostream& operator<<(std::ostream&, const course &); 
}; 

std::ostream& operator<<(std::ostream &out, const course & rhs) 
{ 
    out << rhs.info; 
    return out; 
} 

int main(int, char*[]) 
{ 
    course tmp(3); 
    std::cout << tmp; 
    return 0; 
} 
3

你所列出的語法是正確的,但重載操作符原型已在當然定義聲明才能正常工作。

course.h

class course { 
public: 
    friend std::ostream& operator<<(std::ostream&, const course&); 
private: 
    int info; 
} 

course.cpp

std::ostream& operator<<(std::ostream &out, const course &rhs){ 
    out << rhs.info; 
    return out; 
} 
1

它看起來好像沒什麼問題。這裏是我的版本是:

course.h

#include <iostream> 

class course 
{ 
public: 
    friend std::ostream& operator<<(std::ostream&, const course &); //course is my class object name 
    int info; 
    course(){info = 10;} 
}; 

course.cpp

#include <iostream>  
#include "course.h" 

std::ostream& operator<<(std::ostream &out, const course & rhs) 
{ 
    out << rhs.info; 
    return out; 
} 

main_file.cpp

#include <iostream> 
#include "course.h" 

int main() 
{ 
    course a; 
    std::cout<<a; 

    return 0; 
} 
0

我發現這有幫助!

我的插入和提取操作符稍有不同。

在這裏,他們被定義:

朋友ostream的&操作< <(ostream的& f輸出,數據類型toPrint)

朋友的IStream &操作>>(istream的&鰭,數據類型& toReadTo)

語法需要精確。