错误:函数不是“类”的静态数据成员 - C++
Posted
技术标签:
【中文标题】错误:函数不是“类”的静态数据成员 - C++【英文标题】:ERROR: Function is not a static data member of “Class” - C++ 【发布时间】:2019-03-24 15:23:13 【问题描述】:如果这个问题已经在某处得到解答,我感到非常抱歉,但是经过数小时的搜索,我找不到或无法理解任何内容。
作为 OOP 的新手,我通过尝试创建一个预定义二维字符矩阵的类来锻炼自己的类。我不断收到以下错误:
错误:'char Matrix2d::keyss [4][4]' 不是 'class Matrix2d' 的静态数据成员 char Matrix2d::keyss [ROWS][COLS] =
我的标题如下:
const int ROWS = 4;
const int COLS = 4;
class Matrix2d
public:
char keys [ROWS][COLS];
private:
;
我的 .cpp 是这样的:
char Matrix2d::keys [ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
这是一个使用 arduino 键盘运行的简单代码。
提前感谢您的帮助,并希望我提供了足够的信息,因为这是我第一次在这里发帖。
【问题讨论】:
您需要一个Matrix2d
对象的实例才能分配给它的keys
成员。
要初始化你的数组而不是在你的构造函数中使用一个初始化列表。
对不起,如果你们中的一些人已经看到了这个,但由于我在错误的主题部分,它已被暂停
数据有什么用?在程序运行期间是否应该只有一份数据副本?还是Matrix2d
的每个实例(每个对象)都应该有自己独特且不同的成员变量?
将char keys [ROWS][COLS];
更改为static char keys [ROWS][COLS];
查看类的静态数据成员和常规数据成员之间的区别。 en.cppreference.com/w/cpp/language/static
【参考方案1】:
如果类是这样定义的:
const int ROWS = 4;
const int COLS = 4;
class Matrix2d
public:
char keys [ROWS][COLS];
private:
;
也就是说keys是Matrix2d的实例的一个属性,但是形式
char Matrix2d::keys [ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
定义并初始化类Matrix2d的一个属性,这是不兼容的
如果你想要一个类的属性(一个“静态”属性)
const int ROWS = 4;
const int COLS = 4;
class Matrix2d
public:
static char keys [ROWS][COLS];
;
char Matrix2d::keys [ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
如果您想要具有该默认值的实例属性,请执行
class Matrix2d
public:
char keys [ROWS][COLS] =
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'
;
;
在这两种情况下,我都鼓励您更改可见性
【讨论】:
以上是关于错误:函数不是“类”的静态数据成员 - C++的主要内容,如果未能解决你的问题,请参考以下文章