C++ 如何在C++;物体

C++ 如何在C++;物体,c++,arrays,class,initialization,C++,Arrays,Class,Initialization,阅读后,特别是: 但不要忽视显而易见的解决方案: int myArray[10]={5,5,5,5,5,5,5,5,5} 我试过这样的方法: #include <iostream> class Something { private: int myArray[10]; public: Something() { myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; } int ShowThingy(int what) {

阅读后,特别是:

但不要忽视显而易见的解决方案:

int myArray[10]={5,5,5,5,5,5,5,5,5}

我试过这样的方法:

#include <iostream>

class Something {
private:

int myArray[10];

public:

Something() {
    myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}

int ShowThingy(int what) {
    return myArray[what];
}

~Something() {}
};

int main () {
   Something Thing;
    std::cerr << Thing.ShowThingy(3);
}
这在我看来很奇怪,在编译器看来也是如此:

..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:11:44: error: cannot convert '<brace-enclosed initializer list>' to 'int*' in assignment
与:

我一直做得很好,学习了不起作用的东西,但学习起作用的东西却不太好

那么,如何为类中的数组使用初始化列表{value,value,value}


一段时间以来,我一直在想如何实现这一点,但我非常困惑,我需要为我的应用程序创建许多这样的列表。

除非我弄错了,否则只有在声明过程中初始化变量时才允许使用初始值设定项列表,这就是名称。您不能像在大多数示例中一样,将初始值设定项列表分配给变量

在上一个示例中,您试图将静态初始化添加到非静态成员。如果希望数组是类的静态成员,可以尝试以下操作:

class Derp {
private:
    static int myArray[10];
}

Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };

如果要添加类成员,可以尝试创建静态数组
const
,并将其复制到构造函数中的成员数组中。

需要在构造函数初始化列表中初始化数组

#include <iostream>

class Something {
private:

int myArray[10];

public:

Something()
: myArray { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }
{
}

int ShowThingy(int what) {
    return myArray[what];
}

~Something() {}
};

int main () {
   Something Thing;
    std::cerr << Thing.ShowThingy(3);
}
#包括
分类{
私人:
int-myArray[10];
公众:
某物
:myArray{5,5,5,5,5,5,5,5,5}
{
}
int ShowThingy(int what){
返回myArray[what];
}
~Something(){}
};
int main(){
某物;

STR::你能做到吗?非常酷,标准是什么?“C++中添加了德雷克曼”11@derekerdmanngcc 4.5.1它。我知道VC++即使在即将发布的VC11版本中也不确定编译器。@shengy-我相信是的。至少,您可以创建一个静态常量,在创建新实例时可以复制。@Prætor伊恩,Irc,从我的其他答案之一,使用括号和初始化列表的评论是不正确的,尽管对GCC进行了精细的编译。C++中的原始数组的一个愚蠢的事情是它们不能直接分配。(不允许使用以下代码。<代码> int A(10),B(10);A= B;< />代码>由于C++11在本文中被提到,我将指出std::array:
std::array a={5,5,5,5,5,5,5};std::array b=a;std::array C;C.fill(5);
从技术上讲,您可以将初始值设定项列表分配给C++11中
std::initializer_list
类型的变量。
private:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
 ..\src\Something.cpp:6:20: error: a brace-enclosed initializer is not allowed here before '{' token
 ..\src\Something.cpp:6:51: sorry, unimplemented: non-static data member initializers
 ..\src\Something.cpp:6:51: error: 'constexpr' needed for in-class initialization of static data member 'myArray' of non-integral type
class Derp {
private:
    static int myArray[10];
}

Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
#include <iostream>

class Something {
private:

int myArray[10];

public:

Something()
: myArray { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }
{
}

int ShowThingy(int what) {
    return myArray[what];
}

~Something() {}
};

int main () {
   Something Thing;
    std::cerr << Thing.ShowThingy(3);
}