C++调用类成员函数报non-class type错误问题求助
报错根因
触发C++ 最令人头疼的解析(Most Vexing Parse) 规则:你在main函数中写的TicTac player1();,编译器不会识别为「创建TicTac类的实例player1、调用无参构造函数」,而是会解析为声明一个返回值为TicTac类型、名为player1的无参数函数,所以后续调用成员函数时,编译器会提示player1不是类类型对象。
修复方案
将main函数中的实例化代码修改为以下任意一种即可:
- 全C++版本通用写法:去掉括号
TicTac player1;
- C++11及以上版本支持的统一初始化写法:用花括号
TicTac player1{};
后续面向对象迁移注意事项
你原函数式代码中的全局变量和全局函数,需要全部迁移到TicTac类中:
- 全局棋盘
char tictacBoard[3][3]需要添加到TicTac类的protected成员列表中 - 所有成员函数操作的变量都要改为类的成员变量,不要保留全局变量
- 现在的
player1Info成员函数需要补全读取名字存入类成员的逻辑,示例如下:
void TicTac::player1Info() { cout << "Enter name for player 1: \n"; cin >> player1; }
其余player2Info、printBoard、playerMove等函数,都按照这个思路将原全局函数改写为类成员函数、操作类内部成员变量即可完成迁移。
内容的提问来源于stack exchange,提问作者Keoni Eppe
相关产品推荐
相关产品推荐

