语句“a->friend = b;”出现编译错误

问题描述 投票:0回答:2

无法将一个类的共享指针分配给属于同一类的另一个共享指针。预计“朋友”之前有不合格的 id

#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> 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->friend = b; //not working
    b->friend = a; //not working
    a->info();
    b->info();
    
    return 0;
}

为什么我收到“‘朋友’之前预期的不合格 ID”。 编译器 g++-12

c++ class syntax c++20 keyword
2个回答
1
投票

由于

friend
是保留关键字,因此不能将其用作标识符。

因此,要解决编译错误,应该将成员变量名称从“friend”更改为“test”(任何其他非保留关键字),以避免与保留关键字冲突。

  • 更改给定代码中的这些行

     a->friend = b; //not working
     b->friend = a; //not working
    
  • 到此

     a->test = b; //working
     b->test = a; //working
    

0
投票

正如周伟军所说,“朋友”是一个关键字,不应该用作标识符。 更改共享指针名称后代码有效。

© www.soinside.com 2019 - 2024. All rights reserved.