我有一个类path
,它声明了一个名为
void addConnection(const book& book, const string& name)
其中book
是一个结构。
在我的main
函数中,我调用的void generatePath(const string& inputName);
不在任何类中。当我尝试在path
类上调用函数时,我得到了这个编译错误:
books.cpp:67: error: no matching function for call to ‘path::path()’
所以我的问题是,你如何在课堂上调用一个函数?我一直以为是:
path p;
p.addConnection(b, "frank");
答案 0 :(得分:3)
您没有类路径的默认构造函数。您要么定义它,要么将适当的参数传递给构造函数path p("i don't know what kind of arguments it expects");
注意:您不会调用类。您可以在类的实例上调用方法。
答案 1 :(得分:1)
你没有“调用”一个类,你构造一个类的对象或实例。
您尚未显示path
的代码,因此我们只能提供猜测。我的意思是:你为path
定义了一个非默认的构造函数,比如
class path {
public:
path (std::string const &str) : ... {...}
// note: no "path()"
};
在这种情况下,编译器不会为您合成该默认构造函数。另一种可能性是例如。
class path {
int &r;
};
即。一个类,其中并非所有成员变量都可以默认构造或初始化(在这种情况下:必须初始化引用),在这种情况下,编译器无法合成默认构造函数。
答案 2 :(得分:0)
如果未定义任何构造函数,则在从类实例化时始终会调用并实现默认构造函数。但是如果你定义了一个构造函数,默认的构造函数就是“离开”,那么你可以自己编写它,如果你需要的话。
然而,您应该添加特定的更多代码,以便让我们知道路径是什么; - )