没有用于C ++调用的匹配函数

时间:2014-05-10 03:19:34

标签: c++ class

我正在尝试学习C ++中的类的概念。我编写了一些代码来测试我所知道的,在编译代码时,第一个错误是:“没有匹配函数来调用'base :: base()'  base base1,base2;“

我不知道为什么!

以下是整个代码:

#include <iostream>
using namespace std;

class base {
   int x, y;
  public:
  base (int, int);
  void set_value (int, int);
  int area () { return (x*y); }
};
base::base ( int a, int b) {
 x = a;
 y = b;
}
void base::set_value (int xx, int yy) {
 x = xx;
 y = yy;
}
int main () {
base base1, base2;
base1.set_value (2,3);
base2.set_value (4,5);
cout << "Area of base 1: " << base1.area() << endl;
cout << "Area of base 2: " << base2.area() << endl;
cin.get();
return 0;
}

2 个答案:

答案 0 :(得分:2)

你可以使用

base base1, base2;

仅当有办法使用base的默认构造函数时。由于base已明确定义了非默认的构造函数,因此默认构造函数不再可用。

您可以通过多种方式解决此问题:

  1. 定义默认构造函数:

    base() : x(0), y(0) {} // Or any other default values that make more
                           // sense for x and y.
    
  2. 在您拥有的构造函数中提供参数的默认值:

    base(int a = 0, int b = 0);
    
  3. 使用有效参数构造这些对象。

    base base1(2,3), base2(4,5);
    

答案 1 :(得分:1)

base base1, base2;尝试使用base的默认构造函数构建两个base对象(即base::base()base没有默认构造函数,所以这不会编译。

要解决此问题,请将默认构造函数添加到base(声明并定义base::base()),或使用已定义的2参数构造函数,如下所示:

base base1(2,3), base2(4,5);