我有简单的代码,我从std::vector<std::string>>
开车,但它不起作用。我收到了错误:
prog.cpp:在函数
‘int main()’
中:
prog.cpp:14:9:错误:在‘f’
之前缺少模板参数
Fun f {"a", "b", "c"};
^
prog.cpp:14:9:错误:在‘;’
之前预期‘f’
这是代码。谁能告诉我我做错了什么?
#include <string> #include <vector> template< class String = std::string, class List = std::vector<String> > class Fun : public List { }; int main() { Fun f {"a", "b", "c"}; }
答案 0 :(得分:9)
你必须使用
int main()
{
Fun<> f {"a", "b", "c"};
}
因为Fun是一个模板。
如果你没有参数就调用了“function”而不是“function()”。
你可以说“你正在实例化一个模板类,所以它返回一个类”。
答案 1 :(得分:3)
即使您已为模板参数指定了默认值,也需要包含一个空参数列表来实例化模板:
Fun<> f{"a", "b", "c"};
当然,为了让你工作,你仍然需要Fun
的ctor接受你传递的三个字符串。
最后(当然也是“当然”)标准容器类(包括vector<std::string>
)不打算用作基类,所以这通常不是一个好主意。
答案 2 :(得分:2)
Fun仍然是一个模板,因此您必须以这种方式编写代码:
Fun<> f {"a", "b", "c"};
您还必须提供适当的构造函数。