2014-03-06 171 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)