C++ “如何修复类函数”;“原型不匹配”;及;cadidate是;错误

C++ “如何修复类函数”;“原型不匹配”;及;cadidate是;错误,c++,class,C++,Class,我拼命想完成这最后一项作业,我完全不知道这些错误想告诉我做什么。错误如下: “double Rectangle::calculateArea()”的原型与类“Rectangle”中的任何原型都不匹配(第40行) “候选项是:int Rectangle::calculateArea()”(第11行) “double Rectangle::calculatePerimeter()”的原型与类“Rectangle”中的任何原型都不匹配(第45行) “候选项是:int Rectangle::calcul

我拼命想完成这最后一项作业,我完全不知道这些错误想告诉我做什么。错误如下:

“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))
}

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

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

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);}
  ^^^^^^

编译器会直接告诉你

上面说这两件事不匹配:

 int Rectangle::calculateArea()
 double Rectangle::calculateArea()
这是真的。您的退货类型不同


选择一个并一致使用。

函数在声明(类定义内)和定义中具有不同的返回类型。它们有两个定义,一个在类定义中,另一个在类定义之外。你还没有解释代码应该做什么。@VladFrommosco是的。“为什么?”梅尔波梅对我来说,这看起来很奇怪。只有一个类定义,没有其他定义。
 int Rectangle::calculateArea()
 double Rectangle::calculateArea()