【问题标题】:How to fix class function "prototype does not match" and "cadidate is" errors如何修复类函数“原型不匹配”和“候选人是”错误
【发布时间】:2019-08-02 16:16:39
【问题描述】:

我正在拼命地尝试完成最后一项任务,但我完全不知道这些错误试图告诉我做什么。错误如下:

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

【问题讨论】:

  • 函数在声明(类定义内部)和定义中具有不同的返回类型。它们有两个定义,一个在类定义中,另一个在类定义之外
  • 你还没有解释这段代码应该做什么。
  • @VladfromMoscow 是的。为什么?
  • @melpomene 对我来说这看起来很奇怪。有一个类定义,没有别的。

标签: c++ class


【解决方案1】:

您已经在类定义中使用错误的返回类型(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);}
  ^^^^^^

【讨论】:

    【解决方案2】:

    编译器会直接告诉你!

    它说这两个东西不匹配:

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

    而且,嗯,这是真的。您的返回类型不同。

    选择一个并始终如一地使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 2022-08-06
      相关资源
      最近更新 更多