[英]Why can't I overload operator=?
我想使以下代码起作用:
Mylist lst;
vector<int> v = lst;
所以我看到我需要将列表转换为向量。 我尝试了这段代码:
vector<int> operator=(vector<int> v, const List & l) {
return v; // more profound stuff later :-)
}
(将其放置在课程之外)。 不幸的是,Visual Studio抛出了我一个错误:“错误:'operator ='必须是成员函数”。 而且我不明白-我该怎么办? 我不能将此函数放在向量类中……您能帮我这个忙吗? 谢谢!
您可以将类型的类型转换重载为任何其他类型(请参阅此内容以及Google可以轻松发现的其他资源)。 我认为这是您在这里需要的。 重载赋值运算符在C ++中用于另一件事。
您不能在此类之外的某些类中重载运算符。 我猜向量是std :: vector。 您可以做的是将“ Mylist”类方法添加到StdVector()const中,该方法将返回std :: vector。
例如:
class Mylist {
public:
std::vector<int> toStdVector() const { ... }
};
Mylist list;
std::vector<int> v(list.toStdVector());
Mylist lst;
vector<int> v = lst;
开始时不会调用operator=
。 它尝试调用vector的构造函数,该构造函数采用Mylist
类型的Mylist
。 由于不存在这样的构造函数,因此会产生编译错误。
至于标题中的问题,您绝对可以重载operator=
,但是它不能是自由函数。 它必须是班级的成员。
使MyList为第一个; std :: vector v = lst;
为了使上述工作就需要重载operator std::vector<int> ()
或任何其他变量类型是与兼容std::vector<int>
)在MyList
,请看下面的例子。
另一种方法是提供一个显式调用的方法,以返回对象的std::vector<int>
“ version ”。 std::vector<int> v = obj.to_int_vector ()
,其实现与以下示例几乎相同。
例
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
struct Obj {
operator std::vector<int> () const {
return std::vector<int> (data, data+3);
}
int data[3];
};
int
main (int argc, char *argv[])
{
Obj o;
o.data[0] = -1;
o.data[1] = 2;
o.data[2] = 99;
std::vector<int> v = o;
std::copy (v.begin (), v.end (), std::ostream_iterator<int> (std::cout, " "));
}
输出:
-1 2 99
您可以提供operator vector<int>
因此,如果将vector<int> v = lst;
放在vector<int> v = lst;
,则将调用操作符vector`,并将允许vector的operator =。
class MyList {
public:
operator vector<int> () const
{
return some_valid_vector;
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.