错误:函数不是“类”的静态数据成员 - 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:

;

也就是说keysMatrix2d的实例的一个属性,但是形式

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++的主要内容,如果未能解决你的问题,请参考以下文章

C++类静态成员函数调用错误

visual C++中error C2352是啥意思

visual C++中error C2352是啥意思

关于C++静态成员函数访问非静态成员变量的问题

C++——静态成员详解

C++——静态成员详解