C++类继承编译报request for member非类类型错误求解
报错原因与修复方案
request for member which is of non-class type
核心报错原因
- 触发了C++的最令人头疼的解析(Most Vexing Parse)规则:你代码中所有
stackofChars test();的写法,编译器不会将其识别为「调用无参构造函数创建stackofChars类对象test」,而是会解析为声明了一个名为test、返回值为stackofChars类型、无入参的函数。 - 后续调用
test.isEmpty()、test.push()等成员方法时,编译器判定test是函数类型(非类类型),自然就抛出上述报错。
其他待修复问题(非本次报错直接原因)
stackofChars.h的头文件保护缺失开头的#ifndef STACK_OF_CHARS_H,后续重复引入头文件会触发类重定义错误。- test2测试逻辑写反:压入元素后栈不为空,
isEmpty()返回false才是测试通过,当前判断isEmpty() == true就输出Pass的逻辑错误。 - test2、test3中
push方法的入参需要填写具体char类型值,比如test.push('a')。
修复方法
把三个测试函数里的对象定义行修改为以下任意一种即可:
// 方式1:兼容所有C++版本,调用无参构造直接省略括号 stackofChars test; // 方式2:C++11及以上版本推荐,用花括号彻底避免解析歧义 stackofChars test{};
内容的提问来源于stack exchange,提问作者Bill Laughlin Jr
相关产品推荐
相关产品推荐

