2014-03-06 170 views
-1

我念叨初始化列表,並試圖在coliru初始化列表中C++

#include <iostream> 
#include <string> 
#include <vector> 
#include <initializer_list> 

class dog 
{ 
    public: 
    int age; 
    dog(int a) 
    { 
     age = a; 
     std::string name; 
    } 
    dog(const iterator_list<int>& vec) 
    { 
     age = *(vec.begin()); 
    } 
}; 

int main() 
{ 

    return 0; 
} 

下面的代碼但是似乎它已與初始化列表構造一個問題

dog(const iterator_list<int>& vec) 
{ 
    age = *(vec.begin()); 
} 

任何建議?爲什麼它有問題?

+2

也許你應該嘗試調用它** ** initializer_list而不是** ** iterator_list。它屬於'std'命名空間。 – Praetorian

回答

1

如果我是你,我會使用std::initializer_list。在我看來,最好使用它,因爲新標準爲所有參數具有相同類型的函數提供了它。

所以,你可以有這樣的事情:構建類

​​

,你可以用它像這樣:

dog d1({ 12, 16, 18, 20 }); // if you will want more initialization data in the future 
dog d2 = { 12 }; // or this, for now 

age值將爲12

你總是需要照顧你的方法/類所屬的命名空間:

  • 使用std::initializer_list<int>
  • 使用using namespace std;
+1

'initializer_list'比* *更容易使用*? – Praetorian

+0

它必須被稱爲'dog d1 = {3};'因爲'狗d1(12,16,18,20)';'返回一個錯誤。 –

+0

我非常抱歉我的錯誤。看我的編輯。 – Victor

1

它與編譯:dog(const std::initializer_list<int>& vec)