我收到这些错误:
circleType.cpp||In function 'std::ostream& operator<<(std::ostream&, circleType&)':|
circleType.cpp|48|error: 'getRadius' was not declared in this scope|
circleType.cpp|49|error: 'circumference' was not declared in this scope|
circleType.cpp|50|error: 'area' was not declared in this scope|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
错误可在此处找到:
ostream& operator <<(ostream& outs, circleType& circle1)
{
outs << "radius: " << getRadius() << endl
<< "circumference: " << circumference() << endl
<< "area: " << area() << endl;
return outs;
}
举个例子,这是圆周函数:
double circleType::circumference()
{
return (radius*2*pi);
}
标题文件:
class circleType
{
public:
circleType(); // færibreytulaus smiður
circleType(double the_radius);
double getRadius();
void setRadius(double the_radius);
double area();
double circumference();
friend ostream& operator <<(ostream& outs, circleType& );
private:
double radius;
};
主:
circleType circle1(3.0);
cout << "circle1:" << endl;
cout << "--------" << endl;
cout << circle1 << endl;
所有标题都包含在任何地方。我仍然对过载功能有点困惑,任何帮助都很适合。
答案 0 :(得分:3)
您没有在输入对象(circle1
)上调用成员函数;相反,你试图用一些不存在的相同名称来调用一些全局函数(请注意friend
函数不是该类的成员函数,它是它的朋友。 ,而是一个免费的非成员函数,可以访问该类的内部函数。)
要解决此问题,请更改重载operator <<
的定义,如下所示:
ostream& operator << (ostream& outs, circleType& circle1)
{
outs << "radius: " << circle1.getRadius() << endl
<< "circumference: " << circl1.circumference() << endl
<< "area: " << circle1.area() << endl;
return outs;
}