2014-02-10 37 views
-2

我想使用一個函數來計算使用存儲在結構體中的變量的答案。每當我編譯代碼時,我都會遇到有關struct成員每次使用的錯誤。我在哪裏錯了?無法獲取函數來訪問結構體的成員

乾杯!

#include <iostream> 

using namespace std; 

struct rectangle 
{ 

    double length, width, area, perimeter; // measurements for rectangle 

}; 

int calculations() 
{ 

rect.area = rect.width * rect.length; 

rect.perimeter = rect.width + rect.width + rect.length + rect.length; 

} 

int main() 
{ 

rectangle rect; // rect is a rectnagle structure 

cout << "Please enter the length of your rectangle: " << endl; 
cin >> rect.length; 
cout << "Please enter the width of your rectnagle: " << endl; 
cin >> rect.width; 

calculations(); 

cout << "The area of your rectangle is: " << rect.area << endl; 

cout << "The perimieter of your rectnagle is: " << rect.perimeter << endl; 

cout << rect.length << endl; 
cout << rect.width << endl; 
cout << rect.area << endl; 
cout << rect.perimeter << endl; 

} 

,其中產生的錯誤是:

Untitled.cpp:15:5: error: use of undeclared identifier 'rect' 
rect.area = rect.width * rect.length; 
^ 
Untitled.cpp:15:17: error: use of undeclared identifier 'rect' 
rect.area = rect.width * rect.length; 
      ^
Untitled.cpp:15:30: error: use of undeclared identifier 'rect' 
rect.area = rect.width * rect.length; 
         ^
Untitled.cpp:17:5: error: use of undeclared identifier 'rect' 
rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
^ 
Untitled.cpp:17:22: error: use of undeclared identifier 'rect' 
rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
       ^
Untitled.cpp:17:35: error: use of undeclared identifier 'rect' 
rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
          ^
Untitled.cpp:17:48: error: use of undeclared identifier 'rect' 
rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
             ^
Untitled.cpp:17:62: error: use of undeclared identifier 'rect' 
rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
                 ^
8 errors generated. 

回答

2

添加參數:

void calculations(rectangle& rect) 
{ 

    rect.area = rect.width * rect.length; 

    rect.perimeter = rect.width + rect.width + rect.length + rect.length; 

} 

然後調用:

calculations(rect); 
+0

這修復它,謝謝!可能是一個愚蠢的問題,你能告訴我在參數圓括號內的矩形之後的和號的重要性嗎? –

+0

@MichaelDelahorne「&」在這裏將參數作爲[參考](http://en.wikipedia.org/wiki/Reference_(C%2B%2B))。沒有它,矩形對象將被複制,並且在計算函數內進行的修改不會影響main內的矩形對象。你也可以使用指針'*'來實現同樣的事情,或者根據需要返回一個新的矩形對象。 – zakinster

0

您還沒有宣佈RECT:

int calculations() 
{ 

rect.area = rect.width * rect.length; 

rect.perimeter = rect.width + rect.width + rect.length + rect.length; 

} 

在您的例子招:

rectangle rect; // rect is a rectnagle structure 

,使其全球:

}; 

rectangle rect; // rect is a rectnagle structure 
int calculations() 
{ 
0
void calculations(rectangle &rect) 
{ 

     rect.area = rect.width * rect.length; 

     rect.perimeter = rect.width + rect.width + rect.length + rect.length; 

} 

嘗試使用這個,因爲沒有在計算功能的範圍限定矩形

+0

調用時發送參數作爲參數 計算(rect) – balaji

0

你的功能的問題是,它使用名稱矩形是不是全局的,而是在函數定義之後定義的。所以這個函數什麼都不知道是什麼。

重定義功能

void calculations(rectangle &rect) 
{ 
    rect.area = rect.width * rect.length; 

    rect.perimeter = rect.width + rect.width + rect.length + rect.length; 
} 

,並調用它主要作爲

calculations(rect);