2013-08-21 134 views
0

我創建了一個名爲「Triangle」的類,現在正試圖從主要部分讀出某個類變量(「SideA」)。我特別聲明SideA爲「公開」以防止訪問問題。 但是,當試圖編譯時,程序會拋出錯誤「類Triangle沒有名爲SideA的成員」。閱讀類變量

我粘貼了最重要的部分爲您提供:

class Triangle 
{ 
public: 
float SideA; 
}; 

int main() 
{ 
Triangle Object(); //pair is normally filled with several vars for the constructor) 

//I declared "Object" correctly, it can be constructed. "SideA" is filled by the 
//constructor. I'm just leaving it out 
//right now to keep this text short 

//This line is marked when the IDE aborts the compiling process 
cout << Object.SideA; 

我希望你能幫助我,因爲我真的不知道如何解決這個問題。我從中學習的書籍建議使用特殊函數來實現這些目的(「void readOut {return X}」),但是每次我想要讀出一個數字時,我真的必須寫一個函數嗎?

謝謝你在前進, JustATestAcc

+0

MVP再次擊球。 –

+0

通常情況下,這些對充滿了構造函數的浮點數,我只是把它遺漏了 – JustATestAcc

+0

謝謝大家的回答 – JustATestAcc

回答

3

嘗試更新

Triangle Object(); // This declares a function which returns Triangle type 

Triangle Object; // this defines Object 

又讀most vexing parse

如果C++ 11,你可以初始化Objectlist initialization

Triangle Object{}; // value-initialization (to zero) 
Triangle Object{2.0}; // direct-list-initialization 
0

做成Triangle Object;

試試下面..;)

#include<iostream> 

using namespace std; 


class Triangle 
{ 
public: 
float SideA; 
}; 

int main() 
{ 
Triangle Object; //this defines object 

//I declared "Object" correctly, it can be constructed. "SideA" is filled by the 
//constructor. I'm just leaving it out 
//right now to keep this text short 

//This line is marked when the IDE aborts the compiling process 
cout << Object.SideA; 
} 
0

那是因爲你當你寫這個不創建三角的一個實例:

Triangle Object(); 

這在當地(在主要範圍() )使用空參數列表和Triangle返回類型聲明函數Object。它不會實例化類型爲Triangle的對象,因此不會調用實例的默認構造函數。然而,後者是你明顯想要的。

你可以通過簡單地寫修復:

Triangle Object; 
cout << Object.SideA; 

此外,我建議你不要用大寫字母開頭的變量名。在許多編碼慣例中,正如您已經用Triangle所做的那樣,類型以大寫字母開頭。 Triangle的實際實例稍後可能會與類型的名稱混淆,而不會被識別爲類型實例的名稱。從上下文的名稱在其使用將變得很明顯它到底是什麼,但有掃描的東西的情況下只是爲了找出它實際上代表的是繁瑣和不必要的:

Triangle object; 
cout << object.SideA; 
+0

謝謝。然而,它通常像「三角形對象(kathA,kathB,hyp);」,因爲我需要構造函數的這些變量。三角形也可以創建,我只是不能讀SideA。 – JustATestAcc

+0

我不太明白你想說什麼。如果你這樣做,你會調用一個構造函數Triangle :: Triangle(T kathA,T kathB,T hyp)(我假設你的三角形邊緣都是由相同類型表示的)。 SideA是否仍然是公共會員是正交的。 – thokra

0
Triangle Object(); // Declare a function Object return a Triangle 

這可以是兩件事情:

  1. 類三角的可變對象的變量定義
  2. 爲函數對象函數聲明返回類型的對象三角

C++標準要求這個Lign必須被解釋爲第二點。

它被稱爲Most vexing parse

Triangle Object; 

還是在C++ 11:

你可以通過改變它

Tirangle Object{}; // Useful when parameters are needed 
0

你可以做,三角*對象=新的三角形(); 或三角形對象;