2017-04-17 63 views
0

在下面的代碼中,我得到了第33行的錯誤。爲什麼?什麼是正確的語法? 當然,我犯了一個愚蠢的錯誤......不幸的是,我試圖更好地理解載體。從矢量陣列調用函數

#include <iostream> 
#include <vector> 

class firstClass 
{ 
    public: 
     firstClass(int x, int y):sum(x+y) 
     { 
     } 
     void getSum() 
     { 
     std::cout << sum << std::endl; 
     } 
    private: 
     int sum; 
}; 

class secondClass 
{ 
    public: 
     secondClass(int dim) 
     { 
      obj = new std::vector<firstClass>(dim,firstClass{3,5}); 
     } 
    private: 
     std::vector<firstClass>*obj; 
}; 

int main() 
{ 
    secondClass*obj2; 
    obj2 = new secondClass(4); 
    obj2->(*obj)[0].getSum(); //HERE! 
    return 0; 
} 

錯誤:

error: expected unqualified-id before '(' token 
error: 'obj' was not declared in this scope 
+0

即使您正確地命名'obj',它也是私有的,並且在'main'中不可訪問。你爲什麼要'新'''矢量'?只需使用非指針'vector'成員即可。 – aschepler

+0

我認爲你想要做的語法是'(* obj2-> obj)[0] .getSum();',但是'obj'是'private',所以你會得到另一個錯誤。 – nwp

回答

1
  1. 用於訪問數據成員的正確語法應該是:

    (*(obj2->obj))[0].getSum(); 
    
  2. 注意secondClass::objprivate數據成員,這樣你就可以」 t訪問它在main()

  3. 對於您顯示的代碼示例,您根本不需要使用原始指針和new

+0

謝謝! 1.如何在不使用「新」的情況下創建「secondClasse」? 2.如果我在對象中還有另一個對象向量,那麼語法是什麼? 3.事實上,這個問題出現在另一個程序中,我寫了很快的例子,所以我犯了一些錯誤。 – nostyn

+0

@nostyn 1.只要寫'secondClass obj2;'然後像'obj2.obj'一樣使用它。 2.與1相同 – songyuanyao

+0

我的意思是這樣的語法:「obj3-> obj2 [1] - > obj1 [3]」你可以給我一個例子嗎? – nostyn