程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 一段代碼引起的思考-----編譯器

一段代碼引起的思考-----編譯器

編輯:C++入門知識

今天碰到一個問題,同學寫了一段操作符重載的代碼,但是總是編譯不過,總是提醒'operator <<' is ambiguous,這是指'<<'被多次定義了,他用的是vc++ 6.0,代碼如下:

#include <iostream> 
 
using namespace std; 
 
 
 
class Point 
 

 
public: 
 
    Point(float x=0,float y=0); 
 
    void setPoint(float,float); 
 
    float getXpoint() const {return x;} 
 
    float getypoint() const {return y;} 
 
    friend ostream & operator<< (ostream & os,Point & p); 
 
private: 
 
    float x; 
 
    float y; 
 
}; 
 
 
 
Point::Point(float a,float b) 
 

 
    x=a; 
 
    y=b; 
 

 
 
 
void Point::setPoint(float a,float b) 
 

 
    x=a; 
 
    y=b; 
 
 
 

 
 
 
ostream & operator<< (ostream & output,Point & p) 
 

 
   output << "[" <<p.getXpoint()<<","<<p.getypoint() << "]" << endl; 
 
   return output; 
 

 
 
 
int main() 
 

 
    Point p(4.5,5.5); 
 
 
 
    cout << "x=" << p.getXpoint() << ",y=" << p.getypoint() << endl; 
 
    p.setPoint(8.5,9.5); 
 
    cout << p; 
 
 
 
    return 0; 
 www.2cto.com

這是比較平常的重載‘<<’的例子,我猜想是全局命名空間造成編譯不過的,於是我們把最開始的using namespace std這句話去掉,以std::cout和std::endl代替之,再次編譯,通過。
我把未修改過的代碼用gcc 4.4.3編譯一下,也通過了,相同的代碼在不同的編譯器上也可能會有不同的結果。
在這裡我想到了程序的可控性問題,怎樣讓變量和數據的傳遞在控制之中,讓程序的通用性比較好,避免出現在這個編譯器上編譯通過,而在另外一個編譯器上編譯錯誤,通過這個列子,盡量不要使用全局的命名空間,而使用std::cout和std:endl等代替。


摘自 maochencw的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved