C++ 如何初始化不带';没有默认构造函数吗?

C++ 如何初始化不带';没有默认构造函数吗?,c++,c++11,C++,C++11,我想知道是否有人能告诉我,在对象没有默认构造函数(即需要参数)的情况下,应该如何初始化对象的成员数组 例如: class Foo { public: Foo() : memberArray{bar(1), bar(3), bar(2)} // **The compiler doesnt like this** {} private: Bar memberArray[3]; }; struct Bar { Bar(std::int32_t param

我想知道是否有人能告诉我,在对象没有默认构造函数(即需要参数)的情况下,应该如何初始化对象的成员数组

例如:

class Foo
{
public:
   Foo() : 
      memberArray{bar(1), bar(3), bar(2)}   // **The compiler doesnt like this** 
   {}
private:
   Bar memberArray[3];
};


struct Bar
{
   Bar(std::int32_t param1) {  }
}

我正在使用GCC4.6.1,并为c++11进行编译。有人能指出我哪里出了问题吗?(顺便说一句,请不要建议动态分配内存,因为我没有。)

您遇到了几个问题:大小写不一致、在声明之前使用、缺少分号、缺少包含。这是非常接近的:

struct Bar
{
   Bar(int param1) {  }
};

class Foo
{
public:
   Foo() : 
      memberArray{Bar(1), Bar(3), Bar(2)}
   {}
private:
   Bar memberArray[3];
};

就C++11标准而言,GCC4.6.1已经过时了。你能试试4.6.2或是最前沿的版本吗?另外,发布问题的最新版本。您现在拥有的东西将无法编译(声明之前使用的是不一致的大小写,
struct Bar
),我们也无法判断这些问题是否与您的错误有关。@Ben Voigt:我很难升级,因为编译器是由第三方(CodeSourcery)重新打包的,4.6.1是他们最新版本的基础。那么这是编译器的问题吗?这在c++11中是否可能?可能是重复的,谢谢。这是代表我实际问题的伪代码,我真的应该先编译它。。。。一个更大的错误是,我实际上使用的是
std::array memberArray
,这导致了编译错误。通过将其更改为上面的
Bar memberArray[3]
,问题就解决了。@TimYorke:那么,这个问题实际上与您真正的问题没有任何关系,解决方法是实际使用您发布的代码?是的,我很抱歉。吸取的教训。。从现在起,我将在发布之前编译引用的代码。@TimYorke:
std::array
应该可以正常工作,因为您正在
std::array
的底层C-array上使用聚合初始化,所以可能需要在初始值设定项中添加一组大括号。