为什么我会'missing template arguments before f'



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

您还必须提供一个合适的构造函数。

最新更新