使用公共成员函数访问私有成员变量时出错:变量"was not declared in this scope"

Error when using public member function to access private member variable: Variable "was not declared in this scope"

本文关键字:成员 变量 not was declared in scope this 出错 访问 函数      更新时间:2023-10-16

更新,适用于返回多维数组时遇到问题的任何人

延伸阅读:从函数返回多维数组

我已经在我的标头中声明了一个static int变量。我已经在.cpp文件(实现文件?)中定义了它,如下面的相关代码所示......

卡.h

#ifndef CARD_H
#define CARD_H
class Card {
private:
    static int  _palette[][3];
public:
    static int  palette();
};
#endif /* CARD_H */

卡.cpp

int Card::_palette[][3]=    {
    {168, 0,   32},
    {228, 92,  16},
    {248, 216, 120},
    {88,  216, 84},
    {0,   120, 248},
    {104, 68,  252},
    {216, 0,   204},
    {248, 120, 248}
};
static int palette(){
    return _palette;
}

但是当我编译时,我收到此错误:

..sourcesrcCard.cpp: In function 'int palette()':
..sourcesrcCard.cpp:42:9: error: '_palette' was not declared in this scope
  return _palette;

我的访问器函数不应该palette()能够获取私有成员_palette的值吗?

你忘了Card::

int (*Card::palette())[3]{
    return _palette;
}

方法定义中不应有static。此外,您正在尝试返回int[][],而您应该返回int

将您的类更改为以下内容:

class Card {
private:
    static int  _palette[][3];
public:
    static int  (*palette())[3];
};

首先,方法名是Card::palette,而不仅仅是paletteCard::palette是您应该在方法定义中使用的内容。

其次,静态方法定义不应该包含关键字static

第三,您期望如何能够将数组作为int值返回???给定_palette数组的声明,要从函数返回它,您必须使用int (*)[3]返回类型或int (&)[][3]返回类型

int (*Card::palette())[3] {
    return _palette;
}

int (&Card::palette())[][3] {
    return _palette;
}

typedef 可以使其更具可读性。