friend ostream&opterator<<<T> (ostream & out, LogUser & obj); 该句为友元声明无效如何解决
时间: 2024-03-23 11:37:03 浏览: 65
运算符重载:友元(friend)函数问题
如果 `friend ostream& operator<< <T> (ostream & out, LogUser & obj);` 这个友元声明无效,可能是因为模板参数 `T` 没有被正确识别,可以尝试以下解决方法:
1. 将模板参数 `T` 显式指定为具体类型。例如,假设要输出 `LogUser` 对象的成员变量 `value`,可以这样实现:
```
template<typename T>
friend ostream& operator<<(ostream& out, const LogUser& obj)
{
out << obj.value;
return out;
}
```
在使用时,可以显式指定 `T` 的具体类型,比如:
```
LogUser<int> user(42);
cout << user << endl; // 显示 42
```
2. 将友元声明提到类的外部,并在声明时指定 `T` 的具体类型,例如:
```
template<typename T>
class LogUser {
public:
LogUser(T v): value(v) {}
template<typename U>
friend ostream& operator<<(ostream& out, const LogUser<U>& obj);
private:
T value;
};
template<typename U>
ostream& operator<<(ostream& out, const LogUser<U>& obj)
{
out << obj.value;
return out;
}
```
这样,就可以正常地输出 `LogUser` 对象的成员变量了。
阅读全文