You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:48:08