【问题标题】:Can not use template inside class?不能在课堂内使用模板?
【发布时间】:2021-11-05 22:39:13
【问题描述】:

我尝试实现一个接收参数类型 int 和 string 的函数。所以我想到了模板。

头文件

template <typename T>
class SymbolTable {
public:
   void run(string filename);
   void insert(T value);
}

实施 (.cpp) 文件

template <typename T>
void SymbolTable::run(string filename)
{
   cout << "success" << endl;
}
// Haven't implement "insert" yet!

编译器报错:

name followed by '::' must be a class or namespace name

如果我删除模板,它工作正常。有什么建议...?

【问题讨论】:

  • 试试template &lt;typename T&gt; void SymbolTable&lt;T&gt;::run(string filename)。另见Why can templates only be implemented in the header file?
  • 您的标题谈到在类内部使用模板。但是您的代码显示了一个类模板。是哪个?
  • "typo": -> template &lt;typename T&gt; void SymbolTable&lt;T&gt;::run(string filename).
  • 只需在头文件中进行一些编辑。抱歉,这是我的第一篇文章。
  • @TanNguyen 与许多其他第一篇文章相比,你的文章相当不错。您显示了我们需要的所有代码和确切的错误。一切都是文字!我们在第一篇文章中并不经常看到这种情况:)

标签: c++ templates compiler-errors


【解决方案1】:

这只是一个基本的语法错误。你的方法定义应该是:

template <typename T>
void SymbolTable<T>::run(string filename)
{
   cout << "success" << endl;
}

如果您需要,here 是一些语法正确的示例,说明如何在 c++ 中使用不同的模板变体。

【讨论】:

  • cplusplus.com 不是“参考”,而是由“爱好者”编写的(通常非常糟糕)网站。除非您已经知道足以区分好位和坏位,否则它几乎没有用。
  • @molbdnilo 好电话,感谢您的更正。我同意我的措辞具有误导性……国际海事组织您对该网站的评论即使不是有点苛刻,也是完全有效的。确实需要大量技术知识才能完全使用它,但他们有很多语法正确的示例,这很好。但是消息来源的可靠性完全是另一种基于意见的讨论......
  • 可靠性不是见仁见智,这是事实,问题通常与语义有关,而不是语法。
  • @molbdnilo 是的,你完全正确...重新阅读我的评论,最后一句话非常愚蠢...感谢您指出所有这些!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2011-03-27
相关资源
最近更新 更多