C++编写返回CellColor枚举值的get_color无参成员函数遇错求解
原代码报错的核心原因
- 所有成员函数内部都重复定义了局部版本的
CellColor枚举,还创建了和类私有成员同名的局部color变量。这些局部变量属于函数内部的临时作用域,和Cell类的实际私有成员完全无关,既没做初始化,也根本读不到类成员的真实值,会直接触发编译阶段的类型冲突、未初始化变量的报错。 - 类内的
CellColor枚举被定义在私有域,公开成员函数用它当返回值时,外部调用代码根本无法识别这个类型,会引发“返回类型不可访问”的编译错误。 - 所有对
color的赋值、读取操作全部作用在局部临时变量上,从头到尾没有真正修改过Cell类的私有成员color的取值,逻辑完全和设计目标脱节。
修正的实现要点
- 将
CellColor枚举的定义移动到类的公共访问区域,保证外部代码可以识别get_color()的返回值类型。 - 使用构造函数的初始化列表给类的私有成员
color设置初始值CellColor::white,不要在构造函数内部创建同名局部变量做无效赋值。 - 删掉所有成员函数内部重复的枚举定义、局部
color变量,所有颜色判断、修改、读取操作直接作用在类的私有成员上。 - 按要求实现
get_color():无入参、返回值类型为CellColor,直接返回类的私有成员color即可,不需要在函数内部重复定义变量。 - 因为使用的是强作用域的
enum class,所有引用枚举取值的位置必须加上CellColor::前缀,不能直接写裸的white/black。
修正后的可运行代码
#ifndef HAVEYOUSEENTHSISNAIL_CELL #define HAVEYOUSEENTHSISNAIL_CELL #include <string> #include "definitions.hpp" class Cell { // NxN棋盘单元格定义 public: // 枚举定义放在公共域,保证返回值类型对外可见 enum class CellColor {white, black}; // 默认构造:直接通过初始化列表设置类成员初始值为白色 Cell() : color(CellColor::white) {} // 颜色切换函数 void change_color() { if (color == CellColor::white) { color = CellColor::black; } else { color = CellColor::white; } } // 按需求实现的get_color函数 CellColor get_color() { return color; } // 颜色转字符串函数 std::string get_color_string() { if (color == CellColor::black) { return "1"; } else { return "0"; } } private: CellColor color; // 单元格颜色的私有成员变量 }; #endif
注意:原代码中引入的
<iostream>如果没有实际用到输入输出操作,可以直接删除以减少不必要的编译依赖。
内容的提问来源于stack exchange,提问作者user15397522
相关产品推荐
相关产品推荐

