如何将2-D数组初始化为类变量
How to initialize 2-d array as class variable?
我有一个类别的定义:
#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);
};
我也有我的.cpp文件,其中包含这些方法:
#include "VideoSim.h"
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
video[MAX_ROW][MAX_COLUMN] = { 0 };
}
VideoSim::~VideoSim(void)
{
printf("Dead Video n");
}
void VideoSim::clearScreen(void)
{
int count = 0;
char *pVideo = video[count];
for (count = 0; count < (MAX_ROW * MAX_COLUMN); count++)
{
*(pVideo++) = ' ';
}
}
int VideoSim::setCursorPosition(int newRow, int newColumn)
{
if (newRow >= 0 && newRow <= MAX_ROW && newColumn >= 0 && newColumn <= MAX_COLUMN)
{
currentColumn = newColumn;
currentRow = newRow;
return 0;
}
else
{
return 1;
}
}
现在这是我的主要问题发生的问题:
#include "VideoSim.h"
int main(void)
{
VideoSim v;
return 0;
}
该程序创建了名为v
的VideoSim对象,但随后崩溃了……任何想法为什么会发生这种情况?
如果要在数组中将所有元素初始化为0,则必须使用initializer语法:
VideoSim::VideoSim()
: video{}
{
currentRow = 0;
currentColumn = 0;
}
在video[MAX_ROW][MAX_COLUMN] = { 0 };
行中,您将零写为 video[MAX_ROW][MAX_COLUMN]
,这是一个不限制的错误。
您还可以将零初始化放在类定义中为:
char video[MAX_ROW][MAX_COLUMN]{};
如果您最终添加自定义构造函数,则可以通过提供与上面构造函数中的那样的不同初始化来覆盖此默认初始化。
最简单的方法:
char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
memset(video,0, sizeof(video));
}
相关文章:
- 为什么我们不能在C++中初始化类的成员变量
- 如何在公共类方法中初始化公共变量
- 如何在类构造函数中初始化pthread_t变量
- 如何在 c++ 中初始化类中的私有变量?
- 如何初始化类的 char 成员变量?
- 有没有办法取消初始化类 c++ 中的变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- 如何使用常量变量初始化类的 const 成员变量
- 在C++中初始化类变量浮点数组
- 是否可以使用自动类方法初始化自动变量?
- Qt C++ 初始化类和调用方法,其中包含类中的变量
- 初始化类成员中的变量是一种不好的做法吗?
- 类和CPP核心指南中的初始化优先变量
- 初始化类中的变量
- 通过类构造函数初始化成员变量 STL 向量
- 正在初始化类中的变量
- C++:哪个先被调用/初始化?类构造函数或其成员变量的构造函数
- 初始化类中的私有静态变量
- C++-无法通过构造函数初始化类变量
- 需要以编程方式初始化类变量数组,我怎么做最好