C++中如何在类内定义另一个类的实例并解决声明错误?
问题解决方法
先拆解你代码里的几个语法问题,逐个修正就能解决报错:
- 类定义末尾必须加分号
C++规定类定义结束后必须加;,你的cars和colors类末尾都遗漏了这个分号,这会导致编译器解析混乱,直接补上:
class cars { public: int price(int x); }; // 补上分号 class colors { public: int func1(...); // 改成函数声明,和后续定义匹配 int func2(...); // 同步修改 cars fusca; }; // 补上分号
成员函数声明与定义要匹配
你在colors类里把func1、func2声明成了int变量,但后面又将它们定义为函数,这会引发冲突。必须把类内的声明改成函数形式,和定义的签名对应。修正函数参数的错误写法
func2里的..是非法写法,改成...或者你实际需要的参数列表。另外最好给price函数补个实现,避免链接阶段报错。
修正后的完整代码
#include <iostream> using namespace std; class cars { public: int price(int x) { // 给price函数添加简单实现 return x * 2; } }; class colors { public: int func1(...); int func2(...); cars fusca; // 现在可以正常声明实例 }; int colors::func1(...) { // 直接通过this->fusca调用成员函数 int p = this->fusca.price(5); cout << "func1中获取的价格:" << p << endl; return 0; } int colors::func2(...) { this->fusca.price(10); cout << "func2中调用price(10)" << endl; return 0; } // 测试代码 int main() { colors c; c.func1(); c.func2(); return 0; }
改完后,colors类内的fusca实例就能在所有成员函数里正常调用了,之前的unknown override specified报错主要是类定义没加分号导致的语法解析混乱。
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

