无法将一个类的共享指针分配给属于同一类的另一个共享指针。预计“朋友”之前有不合格的 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
由于
friend
是保留关键字,因此不能将其用作标识符。
因此,要解决编译错误,应该将成员变量名称从“friend”更改为“test”(任何其他非保留关键字),以避免与保留关键字冲突。
更改给定代码中的这些行
a->friend = b; //not working
b->friend = a; //not working
到此
a->test = b; //working
b->test = a; //working
正如周伟军所说,“朋友”是一个关键字,不应该用作标识符。 更改共享指针名称后代码有效。