几乎已经提出了确切的问题,但我认为我的问题并不相似。我将在下面解释代码:
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 ++的新手,重载是一个非常新的概念,但我无法弄清楚为什么会抛出这个错误。
如何解决?
答案 0 :(得分:0)
您仅定义了operator =
({引用} Person
,但您尝试分配指针Person*
。执行此类操作的操作员未定义,因此您收到错误。
要修复,根据预期用途,有一些选项。
Push
的参数更改为Person
的复制或引用,而不是指针operator =
添加到Person *
class Person