我的模板类方法返回错误类型?
My template class method returns bad type?
模板类方法return_self必须返回类型为Class<string>
的对象 .但是,它返回Class<basic_string<char>>
为什么,请查看我的代码
using namespace std;
template <typename Type>
struct Class;
template <typename Type>
ostream& operator<<(ostream& os, Class<Type>& ref){
os << ref.value;
return os;
}
template <typename Type>
struct Class{
Type value;
Class(Type val): value{val}{}
// Returns bad Type
Class<Type> return_self(){
return *this;
}
friend ostream& operator<<<Type>(ostream&, Class<Type>&);
};
int main(){
Class<string> obj{"How are you"};
cout << obj << endl; // This one works fine
cout << obj.return_self() << endl; // Error occurs here
}
std::string
被定义为std::basic_string<char>
的别名,因此它们实际上是同一类型。 这不是程序编译失败的原因。
问题是obj.return_self()
表示临时引用,并且临时引用不能绑定到非常量引用,例如operator<<
函数中的ref
参数。
您将在这段代码中观察到完全相同的错误,它具有相同的问题(尝试将临时引用绑定到非常量引用(:
cout << Class<string>{"How are you"} << endl;
解决方案是将ref
作为常量引用:
template <typename Type>
ostream& operator<<(ostream& os, Class<Type> const & ref){
os << ref.value;
return os;
}
(不要忘记修复好友声明。
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 不允许使用错误类型
- 当读取错误类型时,CIN覆盖我的初始化值
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误:类型为 '.&' 来自类型的临时 '..*康斯特'
- 涉及将要馈送的向量转换为execvp的错误类型
- C++中是否存在错误类型