2012-02-05 105 views
1

我不明白爲什麼這個程序不起作用。我相信這是基本的。計算兩點之間的距離時編譯錯誤

#include <iostream> 
using namespace std; 
class MyPoint 
{ 
    int x; 
    int y; 
public: 
    MyPoint() 
    { 
     x = 0; 
     y = 0; 
    } 

    MyPoint(int newX, int newY) 
    { 
     x = newX; 
     y = newY; 
    } 

    int getX() 
    { 
     return x; 
    } 

    int getY() 
    { 
     return y; 
    } 

    int distance(MyPoint newPoint) 
    { 
     distance = x - newPoint.getX();//need absolute value function 
     return distance; 
    }; 

    int main() 
    { 
    MyPoint point1(0,0); 
    MyPoint point2(5,5); 

    cout << "THe distance between the two circles is " << point1.distance(point2) << endl; 

    return 0; 
    } 

我試圖找到兩點之間的距離,只是爲了測試以確保我正確使用類。我只使用x點。現在代碼不會編譯。

+1

編譯器給你什麼錯誤? – 2012-02-05 07:22:46

+0

將來,您應該粘貼編譯器錯誤。 – 2012-02-05 07:24:54

+0

嘿,只是一個額外的建議。確保始終在代碼中使用正確的縮進方案,並正確使用大括號以幫助您瞭解代碼的流程。 – Lefteris 2012-02-05 07:27:07

回答

3

你的問題就出在distance功能:

int distance(MyPoint newPoint) 
{ 
    distance = x - newPoint.getX();//need absolute value function 
    return distance; 
}; 

在這裏,你有一個名稱爲distance的變量,該變量沒有在任何地方聲明,並且被函數名稱重載。相反,你需要聲明一個新的局部變量,然後返回,或者只是回到它的時候了:

選項1:

int distance(MyPoint newPoint) 
{ 
    int d = x - newPoint.getX(); // renamed d, adding int 
    return d; 
}; 

選項2:

int distance(MyPoint newPoint) 
{ 
    return x - newPoint.getX(); 
}; 
0

大括號中有錯誤。

下面的代碼可以正常運行:(EDIT) - 添加了ABS作爲正確地指出認可機構

#include <iostream> 
using namespace std; 
class MyPoint 
{ 
int x; 
int y; 
public: 
MyPoint() 
{ 
    x = 0; 
    y = 0; 
} 

MyPoint(int newX, int newY) 
{ 
    x = newX; 
    y = newY; 
} 

int getX() 
{ 
    return x; 
} 

int getY() 
{ 
    return y; 
} 

int distance(MyPoint newPoint) 
{ 
    return abs(newPoint.getX() - x);//need absolute value function 

} 
}; 

int main() 
{ 
MyPoint point1(0,0); 
MyPoint point2(5,5); 

cout << "THe distance between the two circles is " << point1.distance(point2) << endl; 

return 0; 
} 
4

現在,你的第一個這裏的問題是main在課堂內 - 你忘記了distance函數之後的一個大括號。你已經有了用於結束類描述的分號,但是你總共只有一個左括號。

你的第二個問題是你在名爲distance的函數中使用名爲distance的變量。不要讓名稱相撞,它們會讓小貓哭泣。

你的第三個問題是我剛纔提到的distance變量應該是int

作爲另一種常規建議,當代碼不能編譯時,編譯器會給出錯誤消息。發佈這些是有幫助的。

1

1)距離函數後的大括號。
2)距離函數的實現不正確。

如果你真的希望它的兩點之間的距離calc下,你應該寫這樣的:

double distance(MyPoint newPoint) 
{ 
    double distance; 
    distance=sqrt((x-newPoint.getX())*(x-newPoint.getX()) 
        +(y-newPoint.getY())*(y-newPoint.getY())); 
    return distance; 
} 

它會發現距離使用勾股定理。
1)用double類型聲明可變距離。 2)使用畢達哥拉斯定理計算距離。
3)返回變量的值。