friend ostream&opterator<< (ostream & out, LogUser & obj);友元声明无效如何解决
时间: 2024-03-23 11:37:05 浏览: 63
C语言头文件 OSTREAM
如果 `friend ostream& operator<<(ostream& out, LogUser& obj);` 这个友元声明无效,可能是因为 `LogUser` 类没有被正确声明,可以尝试以下解决方法:
1. 确认 `LogUser` 类已经被正确声明。在友元声明之前,需要先声明 `LogUser` 类,例如:
```
template<typename T>
class LogUser {
public:
LogUser(T v): value(v) {}
friend ostream& operator<<(ostream& out, const LogUser& obj);
private:
T value;
};
template<typename T>
ostream& operator<<(ostream& out, const LogUser<T>& obj)
{
out << obj.value;
return out;
}
```
2. 将友元声明提到类的外部。如果 `LogUser` 已经被正确声明,可以将友元声明提到类的外部,例如:
```
template<typename T>
class LogUser {
public:
LogUser(T v): value(v) {}
friend ostream& operator<<(ostream& out, const LogUser<T>& obj);
private:
T value;
};
template<typename T>
ostream& operator<<(ostream& out, const LogUser<T>& obj)
{
out << obj.value;
return out;
}
```
这样,就可以正常地输出 `LogUser` 对象了。注意,这里的友元声明中需要指定 `LogUser` 的模板参数 `T`。
阅读全文