我正在运行这两行代码,以便稍后添加到地图中:
o.add("-i", 800, "int option");
o.add("-w", "'switch on' option (no third parameter)");
要添加它们,我正在使用我的两个添加函数定义为:
template<class T>
void add(std::string name, T value, std::string desc);
template<class T>
void add(std::string name, std::string desc);
第一个工作正常,并返回我想要的值,但如果我添加第二个,我得到错误:
error: no matching function for call to ‘Opt::add(const char [3], const char [40])’
我的问题是为什么它正确地在第一个中使用我的字符串,而第二个中的字符串被认为是const char数组。
提前谢谢。
答案 0 :(得分:1)
由于您未在第二次重载中使用模板参数,请将其删除:
template<class T>
void add(std::string name, T value, std::string desc);
void add(std::string name, std::string desc);
可以找到工作样本here。
答案 1 :(得分:1)
错误消息很奇怪,但要使用第二个重载,您需要显式指定模板参数(因为无法自动推导它):
o.add<T>("-w", "'switch on' option (no third parameter)");
或者,如果在这种情况下实际上不需要模板参数,只需将其设为非模板方法。