gpt4 book ai didi

c++ - 同时使用operator++报错: no match for operator <<,

转载 作者:行者123 更新时间:2023-11-28 01:07:21 25 4
gpt4 key购买 nike

我正在尝试为类赋值重​​载许多运算符,并且需要让 << 和++ 运算符协同工作。下面是我正在处理的代码示例。如果您有任何想法,请告诉我。

decaring通用模板

template (class T)  
class Vector
{
public:

class VectIter
{
friend class Vector;
private:
Vector<T> *v; // points to a vector object of type T
int index; // represents the subscript number of the vector's
// array.
public:
VectIter(Vector<T>& x);
T operator++();
T operator++(int);
T operator--();
T operator--(int);
T operator *();

friend ostream& operator <<(ostream& out, const VectIter& rhs)
{
out << (*rhs) <<endl;
return out;
}
};

Vector(int sz);
~Vector();

T & operator[](int i);
void ascending_sort();

private:
T *array; // points to the first element of an array of T
int size;
void swap(T&, T&);
};

这里是主要错误发生的地方:

Vector<Mystring> y(3);
y[0] = "Bar";
y[1] = "Foo";
y[2] = "All";;

Vector<Mystring>::VectIter iters(y);

cout << "\n\nTesting Postfix --";
for (int i=0; i<3 ; i++)
cout << endl << (iters++);

这是我正在使用的运算符示例:

T Vector<T>::VectIter::operator ++()  
{
if(index == (*v).size)
index = 0;
else
index++;
return (*v).array[index];
}

T Vector<T>::VectIter::operator ++(int post)
{
post = index;
if(index == (*v).size)
index = 0;
else
index++;
return (*v).array[post];
}

此代码似乎适用于 int 变量,但当我将其更改为我的自定义类 Mystring 时,出现错误。

最佳答案

你的迭代器 operator++返回 T而不是迭代器,所以你的迭代器的 operator<<没有被调用。最有可能 Mystring没有 operator<<声明/定义或 Mystringoperator<<将非常量引用作为其第二个参数,并且不能接受从 operator++ 返回的临时值.

编辑:鉴于您对 OP 的更新(它与 int 一起使用),您几乎肯定需要实现 operator<<为你的Mystring类。

关于c++ - 同时使用operator++报错: no match for operator <<,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com