转换运算符(赋值运算符=)没有响应
conversion operator (assignment operator=) is not responding
我一直在尝试为我的结构测试对赋值运算符=的调用:
struct array{
void* data;
template<typename S, typename T>
array& operator= (const map<S, T>& that){ cout << "worked..."; return *this;}
private:
array(); //i don't need this
};
我试驾是这样的:
map<int, string> var;
array arr = var;
我收到一个错误:
Error: conversion from
'std::map<int, string, std::less<int>, std::allocator<std::pair<const int, string> > >'
to non-scalar type 'array' requested*/
问题:
究竟是什么问题?我如何重载这样的运算符?我是说
operator=
,它应该将不同类型的对象转换成它自己的 class 类型。
声明
map<int, string> var;
array arr = var;
…不调用复制赋值运算符。
它使用(或表现得好像它使用)复制构造函数:在声明中 =
表示复制初始化。
如果 class 有其他构造函数,他们会被考虑将 var
转换为 array
实例,然后(除非这部分被优化掉)被传递复制构造函数。
但是你只有默认的复制构造函数。
从类型 B 到 class 类型 A 的转换最好用以下两种方式之一表示:
通过 class 接受 B.
的构造函数
如果 B 是 class,通过 B operator A
(转换运算符)。
在其他新闻中:
void*
是一种丢弃类型信息的方法。丢弃类型信息是制造麻烦的一种方式。所以,void*
最好避免。
我一直在尝试为我的结构测试对赋值运算符=的调用:
struct array{
void* data;
template<typename S, typename T>
array& operator= (const map<S, T>& that){ cout << "worked..."; return *this;}
private:
array(); //i don't need this
};
我试驾是这样的:
map<int, string> var;
array arr = var;
我收到一个错误:
Error: conversion from
'std::map<int, string, std::less<int>, std::allocator<std::pair<const int, string> > >'
to non-scalar type 'array' requested*/
问题:
究竟是什么问题?我如何重载这样的运算符?我是说
operator=
,它应该将不同类型的对象转换成它自己的 class 类型。
声明
map<int, string> var;
array arr = var;
…不调用复制赋值运算符。
它使用(或表现得好像它使用)复制构造函数:在声明中 =
表示复制初始化。
如果 class 有其他构造函数,他们会被考虑将 var
转换为 array
实例,然后(除非这部分被优化掉)被传递复制构造函数。
但是你只有默认的复制构造函数。
从类型 B 到 class 类型 A 的转换最好用以下两种方式之一表示:
通过 class 接受 B.
的构造函数
如果 B 是 class,通过 B
operator A
(转换运算符)。
在其他新闻中:
void*
是一种丢弃类型信息的方法。丢弃类型信息是制造麻烦的一种方式。所以,void*
最好避免。