C++ 如何将二维数组初始化为类变量?
我有这样一个类定义:C++ 如何将二维数组初始化为类变量?,c++,C++,我有这样一个类定义: #include <stdio.h> #pragma warning(disable:4996) #define MAX_ROW 10 #define MAX_COLUMN 40 class VideoSim { private: char video[MAX_ROW][MAX_COLUMN]; int currentRow; int currentColumn; public: VideoSim::VideoSim(v
#include <stdio.h>
#pragma warning(disable:4996)
#define MAX_ROW 10
#define MAX_COLUMN 40
class VideoSim
{
private:
char video[MAX_ROW][MAX_COLUMN];
int currentRow;
int currentColumn;
public:
VideoSim::VideoSim(void);
VideoSim::~VideoSim(void);
void clearScreen(void);
int setCursorPosition(int row, int column);
};
程序创建名为v
的VideoSim对象,但随后崩溃。。。知道为什么会这样吗 最简单的方法:
char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL
最简单的方法:
char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL
如果要将数组中的所有元素初始化为0,则必须使用初始化器语法:
VideoSim::VideoSim()
: video{}
{
currentRow = 0;
currentColumn = 0;
}
在video[MAX_行][MAX_列]={0}行中
您将零写入视频[MAX\u行][MAX\u列]
,这是一个越界错误
您还可以将零初始化放在类定义中,如下所示:
char video[MAX_ROW][MAX_COLUMN]{};
如果最终添加自定义构造函数,则可以通过提供与上述构造函数类似的不同初始化来覆盖此默认初始化。如果要将数组中的所有元素初始化为0,则必须使用初始化器语法:
VideoSim::VideoSim()
: video{}
{
currentRow = 0;
currentColumn = 0;
}
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
memset(video,0, sizeof(video));
}
在video[MAX_行][MAX_列]={0}行中
您将零写入视频[MAX\u行][MAX\u列]
,这是一个越界错误
您还可以将零初始化放在类定义中,如下所示:
char video[MAX_ROW][MAX_COLUMN]{};
如果您最终添加了自定义构造函数,那么您可以通过提供与上述构造函数类似的不同初始化来覆盖此默认初始化。好的,我错了。谢谢。使用这个解决方案比使用:memset(video,0,sizeof(video));在我的构造函数中?是的,这更显式,不使用低级函数,并且可以更快,因为您不调用任何函数。编译器还可以优化零初始化,因为这是内置类型的默认初始化。好吧,我错了。谢谢。使用这个解决方案比使用:memset(video,0,sizeof(video));在我的构造函数中?是的,这更显式,不使用低级函数,并且可以更快,因为您不调用任何函数。编译器还可以优化零初始化,因为这是内置类型的默认初始化。如果在我的类定义中已经以这种方式声明了字符,为什么我必须在前面添加字符?哦,我明白了,对不起,我不记得为什么了,但是我被教导不要在我的类定义中初始化任何数据,而只在我的构造函数中初始化。没有区别。在你的代码中你没有初始化它。它根本没有初始化,然后你给你的变量赋值。要初始化值,我建议使用初始化器语法。(
someval{0}
)如果在我的类定义中已经以这种方式声明了字符,为什么我必须在前面添加字符?哦,我明白了,对不起,我不记得为什么了,但是我被教导不要在类定义中初始化任何数据,而只在构造函数中初始化。这没有什么区别。在你的代码中你没有初始化它。它根本没有初始化,然后你给你的变量赋值。要初始化值,我建议使用初始化器语法。(someval{0}
)考虑阵列的std::array
,考虑阵列的std::array
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
memset(video,0, sizeof(video));
}