[英]Why does Visual Studio 2010 give me a syntax error with this code?
[英]Why does Code Blocks give me this error after “>>” and “=” overloading?
我正在学习 oop 并且我在一个小项目中工作,但是代码块给了我一个我无法解释的错误。 “=”重载似乎看起来不错,但如果我读到 integer 之后我得到(0xC0000005)错误。 该项目是关于创建一个名为“Vector”(更像是一个数组)的 class 并创建一些构造函数/析构函数和运算符重载,仅此而已。
#include <iostream>
#include <stdlib.h>
using namespace std;
class Vector
{
int *p;
int dim;
public:
Vector();
Vector(int sizze, int val);
Vector (Vector& v);
void afiseaza();
int suma();
int maxpoz();
void sorteaza();
void reactualizare(int val, int nrcomponente);
Vector& operator = (const Vector &v);
friend std::ostream& operator<<(std::ostream&, Vector &v);
friend std::istream& operator>>(std::istream&, Vector &v);
void setVector(int sizze,int tablou[]);
int getSize();
int* getVector();
int getElement(int i);
~Vector();
};
Vector :: Vector()
{
this->dim=10;
this->p=new int[this->dim];
for (int i=0; i<this->dim; i++)
(this->p)[i]=i;
}
Vector :: Vector(int sizze, int val)
{
this->dim=sizze;
this->p=new int[sizze];
int i;
for(i = 0; i < sizze; i++ )
(this->p)[i]=val;
}
Vector :: Vector(Vector& v)
{
this->dim=v.dim;
this->p=new int[this->dim];
for (int i = 0; i < dim; i++)
{
(this->p)[i]=v.p[i];
}
}
Vector :: ~Vector()
{
this->dim=0;
delete[] this->p;
this->p=NULL;
}
int Vector :: suma()
{
int s=0,i;
for(i=0; i<this->dim; i++)
s+=(this->p)[i];
return s;
}
int Vector :: maxpoz()
{
int pozmax=0;
int maxx=(this->p)[0];
for ( int i=0; i<this->dim; i++)
if (this->p[i]> maxx)
{
maxx=(this->p)[i];
pozmax=i;
}
return pozmax;
}
void Vector :: sorteaza()
{
int i,j;
for (i=0; i<this->dim-1; i++)
for (j=i+1; j<this->dim; j++)
if ( (this->p)[i] > (this->p)[j])
{
(this->p)[i]=(this->p)[i]+(this->p)[j];
(this->p)[j]=(this->p)[i]-(this->p)[j];
(this->p)[i]=(this->p)[i]-(this->p)[j];
}
}
void Vector :: reactualizare(int val, int nrcomponente)
{
this->dim=nrcomponente;
this->p=new int[this->dim];
for (int i=0; i<(this->dim); i++)
{
(this->p)[i]=val;
}
}
Vector& Vector::operator = (const Vector &v)
{
if (this !=&v)
{
this->dim=v.dim;
this->p=new int[this->dim];
for(int i=0; i<=this->dim; i++)
{
(this->p)[i]=(v.p)[i];
}
}
}
std::ostream& operator<<(std::ostream&out, Vector &v)
{
for (int i=0; i<v.dim; i++)
out<<(v.p)[i]<<" ";
return out;
}
std::istream& operator>>(std::istream&in, Vector &v)
{
std::cout<<"Enter the size of the vector(number of elements):\n";
in>>v.dim;
std::cout<<"\n";
std::cout<<"Enter the elements:\n";
v.p=new int[v.dim];
for (int i=0; i<v.dim; i++)
in>>(v.p)[i];
return in;
}
int* Vector:: getVector()
{
return this->p;
}
int Vector:: getElement(int i)
{
return (this->p)[i];
}
int Vector :: getSize()
{
return this->dim;
}
void Vector :: setVector (int sizze, int tablou[])
{
this->p=new int[sizze];
this->dim=sizze;
for (int i=0; i<this->dim; i++)
{
(this->p)[i]=tablou[i];
}
}
int main()
{
int a;
Vector X,Y;
cin>>Y;
X=Y;
cin>>a;
return 0;
}
您的代码中有一个错误。
Vector& Vector::operator = (const Vector &v)
{
if (this !=&v)
{
this->dim=v.dim;
this->p=new int[this->dim];
for(int i=0; i<=this->dim; i++) // your bug here. i should not reach to this -> dim. Change to : i < this->dim
{
(this->p)[i]=(v.p)[i];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.