即使我重载了赋值,也没有可行的重载'='错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使我重载了赋值,也没有可行的重载'='错误相关的知识,希望对你有一定的参考价值。

几乎已经提出了确切的问题,但我认为我的问题并不相似。我将在下面解释代码:

class Person{
public:
    string name;
    int age, height, weight;

    Person(string name = "empty", int age = 0, int height = 0, int weight = 0) {
        this->name = name;
        this->age = age;
        this->height = height;
        this->weight = weight;
    }
    void operator = (const Person &P){
        name = P.name;
        age = P.age;
        height = P.height;
        weight = P.weight;
    }

    friend ostream& operator<<(ostream& os, const Person& p);
};

class Stack{
public:
    int top;
    Person* A;
    int size;

    Stack(int s){
        top = -1;
        size = s;
        A = new Person[size];
    }

    bool isEmpty(){
        if(top == -1)
            return true;
        else
            return false;
    }
    bool isFull(){
        if(top >= size-1)
            return true;
        else
            return false;
    }
    void Push(Person* P){
        if(isFull()){
            cout << "No Space on Stack" << endl;
            return;
        }
        top++;
        A[top] = P;
    }
};

在线A[top] = P;朝向代码的底部我得到错误No viable overloaded '='.

我不明白为什么这不起作用。我在Person类中为赋值编写了重载函数,并且我设法在之前正确地重载了​​<<。我是C ++的新手,重载是一个非常新的概念,但我无法弄清楚为什么会抛出这个错误。

怎么解决?

答案

你只定义了operator =(参考)Person,但你试图指定一个指针Person*。没有定义操作员做这样的事情,所以你得到了错误。

要修复,有一些选项取决于预期的用途。

  • 在分配之前取消引用指针
  • Push的参数更改为Person的复制或引用,而不是指针
  • 添加operator =,将Person *带到class Person

以上是关于即使我重载了赋值,也没有可行的重载'='错误的主要内容,如果未能解决你的问题,请参考以下文章

C++的=重载问题,怎样为两个有相同成员的类赋值

openCv IOS - 没有可行的重载'='

没有可行的重载'='和继承

带有 std::function 参数的重载运算符

自定义类没有可行的重载运算符 []

类型匹配没有可行的重载运算符