gpt4 book ai didi

c++在尝试重载下标运算符时出现转换错误

转载 作者:行者123 更新时间:2023-11-30 02:10:32 26 4
gpt4 key购买 nike

我正在做一项需要运算符重载的学校作业。我的下标重载方法有困难。将返回类型设置为 int 但当我编写类似 int myInt = myVector[i] 的命令时,我收到编译器错误:C2440: '=' : cannot convert from 'MyVector' to 'int'

#include <stdexcept>
#include <string>
#include <iostream>
using namespace std;
const int DOUBLE = 2;

class MyVector
{
private:
int size;
int capacity;
int* myArray;
public:
MyVector();
MyVector(int);
int GetSize();
int GetCapacity();
~MyVector();
void clear();
void Add_Value(int);
//int operator[](int) const;
int& operator[](int);
friend ostream& operator<<(ostream&, MyVector*);
bool operator==(MyVector&);
bool operator!=(MyVector&);
};

#include "lab11.h"

MyVector::MyVector() : size(0), capacity(0){}
MyVector::MyVector(int i) : capacity(i), size(i)
{
int* tempArray = new int[i];
myArray = tempArray;
}
int MyVector::GetSize()
{
return size;
}
int MyVector::GetCapacity()
{
return capacity;
}
MyVector::~MyVector()
{
delete [] myArray;
delete myArray;
}
void MyVector::clear()
{
delete [] myArray;
delete myArray;
myArray = new int[0];
}
void MyVector::Add_Value(int n)
{
if (capacity == 0)
{
capacity = 1;
size = 1;
myArray = new int[1];
myArray[0] = n;
cout << myArray[0] << endl;
}
else
{
if (size == capacity)
{
int newCapacity = capacity * DOUBLE;
int* tempArray = new int[newCapacity];
for (int i = 0; i < size; i++)
{
tempArray[i] = myArray[i]; //copy contents to new array
cout << tempArray[i] << endl;
}
capacity = newCapacity;
delete myArray;
myArray = tempArray;
myArray[size] = n;
//delete []myArray;
size++;

}
else
myArray[size] = n;
}
}
//int MyVector::operator[](int i)
//{
// if (i < 0 || i > size -1)
// {
// string err = "Index out of bounds";
// throw err;
// }
// else return myArray[i];
//}
int& MyVector::operator[](int i)
{
if (i < 0 || i > size -1)
{
string err = "Index out of bounds";
throw err;
}
else return myArray[i];
}
ostream& operator<<(ostream &out, MyVector* mv)
{
int tmp;
for (int i = 0; i < mv->GetSize(); i++)
{
tmp = mv[i];
out << tmp << " ";
}
return out;
}
bool MyVector::operator==(MyVector &mv)
{
if (size != mv.GetSize()) return false;
else
{
for (int i = 0; i < size; i++)
{
if (myArray[i] != mv[i]) return false;
}
}
return true;
}
bool MyVector::operator!=(MyVector &mv)
{
if (size != mv.GetSize()) return true;
else
{
for (int i = 0; i < size; i++)
{
if (myArray[i] != mv[i]) return true;
}
}
return false;
}


void main()
{
MyVector* mv = new MyVector(); //default constructor test
mv->Add_Value(5);
mv->Add_Value(6);
mv->Add_Value(7);
mv->Add_Value(8);
cout << mv;
system("PAUSE");
}

最佳答案

在第 111 行尝试 tmp = (*mv)[i];

您在第 106 行传递了一个指向 MyVector 的指针,您需要在应用 operator[] 之前取消对该指针的引用。

关于c++在尝试重载下标运算符时出现转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486403/

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