对于作业(这是一个相当小的部分,我一直坚持,我不是要求任何人做作业),我们提供了以下代码及其主要调用文件:
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
答案 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');