2015-05-08 31 views
3

我正在學習C++。我打算在另一個對象內創建幾個對象,但是編譯器給出錯誤 - 沒有與'Grass :: Grass()'的調用匹配的函數。如何聲明並在另一個對象的構造函數中創建對象?

這是「世界」對象的頭文件。其中我宣佈了兩個「草」對象: -

#ifndef WORLD_H 
#define WORLD_H 
#include "Grass.h" 

using namespace std; 

class World 
{ 
public: 
World(); 

private: 
Grass g1; 
Grass g2; 
}; 

這是「世界」對象的cpp文件。在構造函數中,我試圖製作「草」對象,但失敗了。

#include "World.h" 
#include <iostream> 

using namespace std; 

World::World() 
{ 
g1(200, 200); 
g2(300, 200); 
} 

回答

3

您的語法錯誤。您正在尋找所謂的構造函數初始化列表。嘗試(假設你已經得到了Grass構造正確的簽名):

World::World() : 
    g1(200, 200), 
    g2(300, 200) 
{ 
    // Nothing 
} 
+1

構造函數初始化列表,可用於需要建築在初始化包括原始類型的任何成員變量。 – Andy

+1

@Andy,如果可能,應始終使用它,即使該類型具有默認構造函數,由於不是兩個調用(ctor +賦值運算符),您只能調用複製/移動ctor。 – vsoftco

相關問題