错误C++运算符重载

Error C++ operator overloading

本文关键字:重载 运算符 C++ 错误      更新时间:2023-10-16

我正在编写一个程序,它可以获取向量并对其进行修改但它给了我错误:"变量'Vector'不是类型名"

我是c++重载运算符的新手,所以它们可能会有很多语法错误

这里的问题是什么,是在函数声明中还是在实现中

还有一件事,我什么时候可以在参数中使用const?

class Vector{
private:
    int n;
    int *vArray;
public:
    Vector();
    Vector(int);
    ~Vector();
    friend istream& operator>>(istream& is , Vector &v );
    friend ostream& operator>>(ostream& os  , const Vector &v);
    Vector& operator+=(const Vector& );
    Vector operator+(Vector& rhs);
    double operator*(Vector&);
    Vector operator-(Vector);
};
Vector::Vector(){
    n = 2;
    vArray = new int[n];
}

Vector::Vector(int num){
    n = num;
    vArray = new int[n];
}
Vector::~Vector(){
    delete [] vArray;

}

istream& operator>>(istream& is, Vector& v){
    for (int i = 0; i < v.n; i++)
        is >> v.vArray[i];
    return is;
}
ostream& operator>>(ostream& os, const Vector& v){
    for (int i = 0; i < v.n; i++)
        os >> v.vArray[i];
    return os;

}
Vector& :: Vector operator+=(const Vector& rhs){
    if(n == rhs.n){
        for (int i = 0; i < n; i++){
            this->vArray[i] += rhs.vArray[i];
        }
        return *this;
    }
    cout << "Error: size not match" << endl;
}
Vector:: Vector operator+( Vector& rhs){
    if (n == rhs.n){
        Vector z(n);
        for (int i = 0; i < n; i++)
            z.vArray[i] = this->vArray[i] + rhs.vArray[i];
       return z;
    }
    cout << "Error: size not match"<<endl;

}

double::Vector operator* (Vector& v){
    double count;
    if (n == v.n){
        for (int i = 0; i <n; i++){
            count += this->vArray[i] * v.vArray[i];
        }
        return count;
    }
    cout << "Error: size not match";
}

Vector::Vector operator-(Vector v){
    if (n == v.n){
        Vector z(n);
    for (int i = 0; i < n; i++){
        z.vArray[i]=this->vArray[i]-v.vArray[i];
    }
    return z;
}
    cout << "Error: size not match" << endl;
}

您在以下几行中出现了一些错误:

Vector& :: Vector operator+=(const Vector& rhs){
Vector& :: Vector operator+=(const Vector& rhs){
Vector:: Vector operator+( Vector& rhs){
double::Vector operator* (Vector& v){
Vector::Vector operator-(Vector v){

这些应该是:

Vector& Vector::operator+=(const Vector& rhs){
Vector& Vector::operator+=(const Vector& rhs){
Vector Vector::operator+( Vector& rhs){
double Vector::operator* (Vector& v){
Vector Vector::operator-(Vector v){

not a typename错误可能来自Vector::Vector错误,因为您应该返回一个类型,而不是标识Vector的构造函数。

此外,向量类不会定义/删除复制构造函数或赋值运算符。如果您复制此类的实例,则它将使用默认的复制/分配,它将简单地复制指针成员的值,而不执行深度复制——您将以双重删除告终,这将使您的程序崩溃。

对于const参数问题。。只要函数不修改传入的值,就应该使用const引用。此外,如果函数本身不修改类的对象,则成员函数也应该是const。例如,运算符+应该接受一个const参数,并且它本身也是const:

Vector Vector::operator+(Vector const& rhs) const

在可能的情况下使用const是一种很好的做法——通常放宽限制比追溯添加限制更容易。

看看这个:http://www.parashift.com/c++-faq/const-correctness.html