【问题标题】:"name followed by '::' must be a class or namespace name" error when making a template class制作模板类时出现“后跟'::'的名称必须是类或命名空间名称”错误
【发布时间】:2021-10-21 19:41:32
【问题描述】:

Node.cpp 代码:

#include "Node.h"
using namespace std;

template <typename t> 
Node :: Node(t nodeDate){
data = nodeData;

}

Node.h 代码:

#ifndef NODE_H
#define NODE_H

using namespace std;

template <typename t>
class Node{
public:
    Node(t nodeData);
    
private:
    Node *nextNode;
    type data;
friend class LinkedList;

    

};
#endif

cpp 类中的 Node :: Node(t nodeDate) 给出“名称后跟 '::' 必须是类或命名空间名称”,我不知道为什么,因为我有 include 语句

【问题讨论】:

  • 不要 using namespace std; 在头文件中。在任何地方都已经够糟糕了,但在头球上真的很糟糕。您也不能拆分模板代码。全部放在头文件中。
  • Node::Node -> Node&lt;t&gt;::Node。您的代码也有一些错别字...
  • 你的错误是相当字面的。 Node :: 无效,因为 Node 不是类或命名空间。这是一个模板。 Node&lt;t&gt; 将是一个类。
  • 除了“不要using namespace std;”之外,这段代码中没有使用std中的任何内容,因此该指令没有完成任何事情。

标签: c++ templates constructor declaration function-definition


【解决方案1】:

构造函数Node 是类模板Node&lt;t&gt; 的数据成员。所以你需要写

template <typename t> 
Node<t> :: Node(t nodeDate){
data = nodeData;

}

并且需要初始化数据成员nextNode

构造函数参数最好声明为

Node( const t &nodeData);

构造函数定义可以如下所示

template <typename t> 
Node<t> :: Node( const t &nodeDate) : data( nodeData ), nextNode( nullptr )
{
}

还将构造函数定义放在标题中。

目前尚不清楚此数据成员声明中使用的名称type

type data;

的意思。你是说

t data;

如果类Node 是类LinkedList 的内部类,那就更好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多