【问题标题】:error: expected constructor, destructor, or type conversion before '*' token错误:“*”标记之前的预期构造函数、析构函数或类型转换
【发布时间】:2016-03-14 14:22:23
【问题描述】:

堆栈溢出的新功能。 所以我正在尝试重建我在大学里学到的所有东西,这是我将用来进入堆栈/队列的模板节点

template<typename T>
class node{

public:

    node();                        
    node(T data);                   
    ~node();                        

    T           GetData();          
    node        *&GetNext();        
private:

    void        DeleteNode();       //Deletes Node

    T           m_data;             //Template Data
    node        *next;              //next pointer
};

template<typename T> 
node *&node<T>::GetNext() //Error is here
{ 
   return next;
}

错误读作“错误:预期的构造函数、析构函数或在'*'标记之前的类型转换”

我尝试了移动节点和 *& 的不同变体,但似乎都不起作用。

【问题讨论】:

  • 你想做什么?也许这个问题可以让我们更好地帮助你。
  • 将指针的引用作为参数是有意义的。返回对指针的引用通常不会。您不希望您班级的用户去更改内部指针,对吗?
  • @hlt 当然你可以引用指针,并且应该有一个与那里使用的完全相同的指针。
  • 它应该返回名为 next 的指针。并且错误不在 *&.我让它在一个不在模板中的不同迭代中正确运行。
  • @JoshuaLiu 删除&amp;

标签: c++


【解决方案1】:
node<T> *&node<T>::GetNext()

您需要为返回类型和包含该函数的类指定 T。

【讨论】:

  • 呵呵没想到。为什么这是必要的?是不是因为 node 的基础结构是一个模板,所以两者都需要
  • 该定义开始于类范围之外,因此node 不是类型。您需要指定作为类型的返回类型。还有其他一些模板情况,其中模板类函数的返回类型可以是具有不同模板参数的相同模板类。因此,如果语言语法以某种方式假定相同的模板参数,那将是有限的。
猜你喜欢
  • 2018-12-04
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多