gpt4 book ai didi

c++ - 将非静态数据成员与常量成员进行比较

转载 作者:行者123 更新时间:2023-11-28 01:42:05 24 4
gpt4 key购买 nike

下面是代码,我想在其中比较非静态数据成员 check 和类中定义的常量数据成员 NULL_NODE

为什么不能比较?什么是推荐的方法来拥有代码中描述的 is_null 功能并保持 NULL_NODE 为不可修改的实体?

class test {
public:
struct st {
int check;
bool is_null() const { return NULL_NODE == check; }
};

private:
const int NULL_NODE{-1};

};


int main() {
return 0;
}

代码是使用以下命令编译的:g++ -std=c++11 测试.cpp

异常报告:

test.cpp: In member function ‘bool test::st::is_null() const’:
test.cpp:8:39: error: invalid use of non-static data member ‘test::NULL_NODE’
bool is_null() const { return NULL_NODE == check; }
^
test.cpp:12:27: note: declared here
const int NULL_NODE{-1};

最佳答案

为什么要在 struct st 中引用 non-static 变量?这是不可能的,因为您永远不会知道应该引用哪个 test 实例。

换句话说,内部结构没有对周围类的引用——相比之下,在 Java 中内部类确实有那个引用,除非内部类被声明为 static

注意下面的代码是如何编译的:

int main() {
test::st x; /* instance of your struct, without any reference to "test" class" */
return 0;
}

因此,您需要将NULL_NODE 声明为static const

关于c++ - 将非静态数据成员与常量成员进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46741956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com