我是c +的新手,我希望总结两个对象,这要归功于运算符重载,但问题是我的程序在程序运行期间崩溃了,而且我不知道我的问题出在哪里修复以便很好地编译我的代码。
主要
#include <iostream>
#include <string>
#include "Personnage.h"
int main()
{
Personnage rony(32), marc(20);
Personnage resultat;
resultat = rony + marc;
system("PAUSE");
return 0;
}
Personnage.h
class Personnage
{
public:
Personnage();
Personnage(int force);
private:
int power;
};
Personnage operator+(Personnage const& first, Personnage const& second);
Personnage.cpp
#include "Personnage.h"
#include <string>
Personnage::Personnage() : power(0)
{
}
Personnage::Personnage(int force) : power(force)
{
}
Personnage operator+(Personnage const& first, Personnage const& second)
{
Personnage resultat;
resultat = first + second;
return resultat;
}
感谢您的帮助!
答案 0 :(得分:3)
问题在于您的操作员无休止地自行调用。这句话:
resultat = first + second;
...调用你的操作符,然后再次执行该语句,等等。最终你得到一个堆栈溢出。
您的operator+
需要决定将两个Personnage
加在一起的语义意义。例如
Personnage operator+(Personnage const& first, Personnage const& second)
{
int total_power = first.power + second.power;
return Personnage(total_power);
}
要访问私有成员,通常可以在类中将重载的运算符声明为friend
class Personnage
{
public:
Personnage();
Personnage(int force);
friend Personnage operator+(Personnage const& first, Personnage const& second);
private:
int power;
};
答案 1 :(得分:0)
将其更改为
friend Personnage operator+(Personnage const& first, Personnage const& second)
{
Personnage resultat;
resultat.power = first.power + second.power;
return resultat;
}
或
friend Personnage operator+(Personnage const& first, Personnage const& second)
{
Personnage resultat(first.power + second.power);
return resultat;
}
或
friend Personnage operator+(Personnage const& first, Personnage const& second)
{
return (Personnage resultat(first.power + second.power));
}
在.h文件中也声明为friend
。
所有都是一样的,只是对不同类型的构造函数的不同调用。