g++-12编译报错:‘a->friend = b;’语句出现expected unqualified-id错误求助
编译错误“expected unqualified-id before ‘friend’”的原因及修复
错误原因
friend是C++的关键字,专门用于声明友元关系,不能用作变量名(包括类成员变量名)。你在foo类中把成员变量命名为friend,编译器无法将其识别为合法标识符,因此抛出编译错误。
修复方案
将成员变量名替换为任意非C++关键字的合法标识符,比如ptr_friend:
修正后的代码如下:
#include <iostream> #include <memory> #include <iomanip> class foo { double num; int age; public : void info() { std::cout << num << " " << age << std::endl; } std::shared_ptr<foo> ptr_friend; // 替换为合法标识符 foo() = delete; foo(double num_param, int age_param) : num(num_param), age(age_param) { std::cout << num << " : constructed\n"; } ~foo() { std::cout << num << " : destroyed\n" ; } }; int main() { std::shared_ptr<foo> a{new foo(5.3, 56)}; std::shared_ptr<foo> b{new foo(11.6, 89)}; a->info(); b->info(); a->ptr_friend = b; // 正常赋值 b->ptr_friend = a; // 正常赋值 a->info(); b->info(); return 0; }
说明
替换后编译器可以正确识别成员变量,赋值操作就能正常执行。C++的关键字(如friend、class、int等)都被语言保留,不能用作自定义标识符,编写代码时需避开这些关键字。
内容的提问来源于stack exchange,提问作者semicolon_missing
相关产品推荐
相关产品推荐

