如何修复类函数“原型不匹配”和“ cadidate is”错误

时间:2019-08-02 16:16:39

标签: c++ class

我正拼命地完成最后的任务,而这些错误试图告诉我做些什么我完全不知所措。错误是这样的:

“'double Rectangle :: calculateArea()'的原型与类'Rectangle'中的任何原型都不匹配”(第40行)

“候选人是:int Rectangle :: calculateArea()”(第11行)

“'double Rectangle :: calculatePerimeter()'的原型与类'Rectangle'中的任何原型都不匹配”(第45行)

“候选人为:int Rectangle :: calculatePerimeter()”(第12行)

这是我在该论坛上的第一篇帖子,因此我对格式不正确表示歉意

我没有尝试任何事情,因为在论坛上找到的解决方案均与我的问题没有直接关系(或者我认为)。

谢谢

// Rectangle.cpp
using namespace std;
class Rectangle
{
public: 
  void setLength(double length);
  void setWidth(double width);
  double getLength();
  double getWidth();

  int calculateArea() {return width*length;}
  int calculatePerimeter() {return (width*2) + (length*2);}


private:    
  double length;
  double width;
}; 

void Rectangle::setLength(double len)
{
  len = length;
}

void Rectangle::setWidth(double wid)
{
  wid = width;
}

double Rectangle::getLength()
{
  return length;
}

double Rectangle::getWidth()
{
  return width;
}

double Rectangle::calculateArea()
{
  return (width*length)
}

double Rectangle::calculatePerimeter()
{
  return ((width*2) + (length*2))
}

2 个答案:

答案 0 :(得分:3)

您已经用错误的返回类型(int而不是double)在类定义中定义了函数

class Rectangle
{
  //...
  int calculateArea() {return width*length;}
  int calculatePerimeter() {return (width*2) + (length*2);}
  //..
}; 

然后您在课外重新定义了它们

double Rectangle::calculateArea()
{
  return (width*length)
}

double Rectangle::calculatePerimeter()
{
  return ((width*2) + (length*2))
}

这些功能定义不正确

void Rectangle::setLength(double len)
{
  len = length;
  ^^^^^^^^^^^^
}

void Rectangle::setWidth(double wid)
{
  wid = width;
  ^^^^^^^^^^^
}

它们的定义必须像

void Rectangle::setLength(double len)
{
  length = len;
}

void Rectangle::setWidth(double wid)
{
  width = wid;
}

所有这些功能

  double getLength();
  double getWidth();

  int calculateArea() {return width*length;}
  int calculatePerimeter() {return (width*2) + (length*2);}

应使用限定符const声明

  double getLength() const;
  double getWidth() const;

  double calculateArea() const {return width*length;}
  ^^^^^^
  double calculatePerimeter() const {return (width*2) + (length*2);}
  ^^^^^^

答案 1 :(得分:0)

编译器从字面上告诉您!

它说这两件事不匹配:

 int Rectangle::calculateArea()
 double Rectangle::calculateArea()

而且,是的。您的退货类型有所不同。

选择一个并持续使用它。