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上使用聚合初始化,所以可能需要在初始值设定项中添加一组大括号。