两个参数模板的作用与调用中的一个参数不同

时间:2015-04-16 03:08:31

标签: c++

对于作业(这是一个相当小的部分,我一直坚持,我不是要求任何人做作业),我们提供了以下代码及其主要调用文件:

template <class number_type>
class Point {
public:
  Point(const number_type& x_, const number_type& y_) : x(x_),y(y_) {}
  // REPRESENTATION
  number_type x;
  number_type y;
};

template <class number_type, class label_type>
class QuadTree {
public:
    QuadTree(const number_type& number_, const label_type& label_) : number(number_), label(label_){}

    number_type number;
    label_type label;
    };

int main() {
std::vector< std::pair<Point<int>,char> > simple_points;

QuadTree<int,char> simple;
}

但是,使用与所提供的编码非常相似的样式会产生一个&#34;没有匹配的功能&#34;我的终端错误:

我很困惑为什么它在这种情况下不起作用,以及我可以做些什么来解决它。

作为一个注释,我们不允许使用c ++ 11,结构和一些其他工具。此外,我们不允许更改&#34; main&#34;功能,所以QuadTree简单;必须保持原样

main.cpp: In function ‘void simple_test()’:
main.cpp:110:22: error: no matching function for call to ‘QuadTree<int, char>::QuadTree()’
   QuadTree<int,char> simple;
                      ^
main.cpp:110:22: note: candidates are:
In file included from main.cpp:14:0:
quad_tree.h:56:5: note: QuadTree<number_type, label_type>::QuadTree(const number_type&, const label_type&) [with     number_type = int; label_type = char]
     QuadTree(const number_type& number_, const label_type& label_) : number(number_), label(label_){}
     ^
quad_tree.h:56:5: note:   candidate expects 2 arguments, 0 provided
quad_tree.h:54:7: note: QuadTree<int, char>::QuadTree(const QuadTree<int, char>&)
 class QuadTree {
       ^
quad_tree.h:54:7: note:   candidate expects 1 argument, 0 provided

2 个答案:

答案 0 :(得分:0)

您的QuadTree构造函数有2个参数,但您可能(根据您的错误消息)有一个类似

的定义
QuadTree<int,char> simple; 

声明一个没有参数传递给构造函数的对象。你需要做一些像

这样的事情
QuadTree<int, char> simple(2, 'a'); // need to specify the parameters

请注意,因为您定义了构造函数,所以编译器不再为您生成默认值。

答案 1 :(得分:0)

此代码:

QuadTree<int,char> simple;

正在尝试调用默认构造函数。但是,由于您提供了构造函数,因此将隐式删除默认构造函数。您提供的构造函数是:

QuadTree(const number_type& number_, const label_type& label_)

所以你必须这样做:

QuadTree<int, char> simple(42, 'C');