我为什么在f之前'错过模板参数'

时间:2013-08-04 17:30:50

标签: c++ c++11

我有简单的代码,我从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"};
 }

3 个答案:

答案 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"};

您还必须提供适当的构造函数。