我有一个简单的代码,可以从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"}; }
您必须使用
int main()
{
Fun<> f {"a", "b", "c"};
}
因为有趣是一个模板。
这就像你调用"function"而不是"function()"是因为没有参数。
您可以说"您正在实例化一个模板类,以便它返回一个类"。
即使您已经为模板参数指定了默认值,也需要包含一个空参数列表来实例化模板:
Fun<> f{"a", "b", "c"};
当然,为了实现这一点,Fun
仍然需要一个接受您传递的三个字符串的ctor。
最后(当然也是"当然"),标准容器类(包括vector<std::string>
)不打算用作基类,所以这通常不是一个好主意。
Fun仍然是一个模板,所以你必须这样写代码:
Fun<> f {"a", "b", "c"};
您还必须提供一个合适的构造函数。