首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >类模板的C++成员函数无法识别

类模板的C++成员函数无法识别
EN

Stack Overflow用户
提问于 2014-02-15 17:39:25
回答 1查看 4.2K关注 0票数 0

我正在处理一个二进制搜索树类,并实现一个查找操作。公共函数有两个版本,一个返回一个const节点*,它是const,另一个返回一个非const节点*,而它本身并不是const。以下是公开的定义:

const Node *Find(const T &t) const { Find(t, m_root); }

Node *Find(const T &t) { Find(t, m_root); }

以下是私有查找方法的定义:

代码语言:javascript
运行
AI代码解释
复制
template <typename T>
const Node* CTree<T>::Find(const T &t, Node *root) const {
    if (root == 0)
        return Node();
    else if (t < root->m_number)
        Find(t, root->m_ll);
    else if (t > root->m_number)
        Find(t, root->m_rl);
    else
        return this;
}

Visual告诉我"'Find‘:成员函数在’CTree‘中没有声明“。它为什么要这么说?

编辑以添加错误消息的细节:有5条用于启动const Node*...的私有方法定义行的消息

Missing type specifier - int assumed

Syntax error : missing ';' before '*'

'T' : undeclared identifier

'CTree' : 'T' is not a valid template type argument for parameter 'T'

syntax error : missing ',' before '&'

然后,定义结束支撑的另一个错误(我认为这是导致其他5个错误的原因):

'Find' : member function not declared in 'CTree'

请注意,Visual并没有像在其他地方那样突出显示NodeFind定义中的作用。

以下是全班学生:http://pastebin.com/JEEZJD4n

EN

回答 1

Stack Overflow用户

发布于 2014-02-16 10:09:16

方法定义中有错误(pastebin第93行):

代码语言:javascript
运行
AI代码解释
复制
template <typename T>
const Node* CTree<T>::Find(const T &t, Node *root) const {

在全局范围内没有任何类型的Node,因为class Node是嵌套的。因此,第一个修复将是添加父类资格:

代码语言:javascript
运行
AI代码解释
复制
template <typename T>
const CTree<T>::Node* CTree<T>::Find(const T &t, Node *root) const {

但是,还有另一个问题:现在,编译器无法正确地解析它。必须添加typename关键字,以指示嵌套类型:

代码语言:javascript
运行
AI代码解释
复制
template <typename T>
const typename CTree<T>::Node* CTree<T>::Find(const T &t, Node *root) const {

详细信息请参见"When is the “typename” keyword necessary?“。

备注:

  • 如果将方法定义直接放置到类主体(取决于代码样式),则可以避免任何这些问题。
  • 如果您可以使用不同的编译器,您可以广泛地丰富您的编码经验,并使您的模板编码更有效率。请注意,在这种错误中,g++是如何更清晰的: main.cpp:在全局范围: main.cpp: 104 :7: main.cpp:' Node‘不命名类型const Node* CTree::Find(const T &t,Node *root) const ^ main.cpp :在全局范围:main.cpp:104:7: error:需要'typename’之前的‘CTree::节点’,因为'CTree‘是一个依赖范围const::节点* CTree::Find(const T &t,Node *root)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21806156

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文