【问题标题】:Why am I getting the error: invalid use of member (did you forget the ‘&’)?为什么我收到错误:无效使用成员(您忘记了“&”)?
【发布时间】:2016-10-14 23:17:33
【问题描述】:

当我尝试编译 popRight 或 popLeft 时出现此错误。为什么?这是代码。

出列类

  #include "node.h"
template <class T>
class Dequeue
{
    public:
        void pushLeft(T data);
        void popLeft();
        T left();
        void pushRight(T data);
        void popRight();
        T right();
        bool empty();
    private:
        int length;
};

template<typename T>
bool Dequeue<T>::empty()
{
    if (length == 0)
    {
        return true;
    }
    else
        return false;
}

template<typename T>
void Dequeue<T>::pushLeft(T data)
   {
        if (empty() == true)
        {
            left->setData(data);
            right->setData(data);
        }
        else if (left->getData() == right->getData())
        {
            left->setData(data);
        }
        else
        {
            node<T> *aux = new node<T>;
            aux->setData(data);
            left->setPrevious(aux);
            aux->setNext(left);
            left = aux;
        }
        length++;

    }

template<typename T>
  void Dequeue<T>::pushRight(T data)
   {
        if (empty() == true)
        {
            right->setData(data);
            left->setData(data);
        }
        else if (right->getData() == left->getData())
        {
            right->setData(data);
        }
        else
        {
            node<T> *aux = new node<T>;
            aux->setData(data);
            right->setPrevious(aux);
            aux->setNext(right);
            right = aux;
        }
        length++;
    }

template<typename T>
 void Dequeue<T>::popLeft()
    {
        node<T> *node = left->getNext();
        node->setPrevious(NULL);
        left = node;
    }

template<typename T>
 void Dequeue<T>::popRight()
 {
        node<T> *node = right->getPrevious();
        node->setNext(NULL);
        right = node;
  }

节点类

 template <class T>
class node
{
    public:
        node(T data);
        node(T data, node<T>* next);
        T getData();
        node<T>* getNext();
        void setData(T data);
        void setNext(node<T>* next);
        void setPrevious(node<T>* previous);
    private:
        T data;
        node<T> *next;
        node<T> *previous;
        node<T> *left;
        node<T> *right;
};

template <typename T>
node<T>::node(T data)
{
    this->data = data;
    this->next = NULL;
    this->previous = NULL;
}

template <typename T>
node<T>::node(T data, node<T>* next)
{
    this->data = data;
    this->next = next;
    this->previous = previous;
}

template <typename T>
T node<T>::getData()
{
    return this->data;
}

template <typename T>
node<T>* node<T>::getNext()
{
    return this->next;
}

template <typename T>
void node<T>::setData(T data)
{
    this->data=data;
}

template <typename T>
void node<T>::setNext(node<T>* next)
{
    this->next = next;
}

template <typename T>
void node<T>::setPrevious(node<T>* previous)
{
    this->previous = previous;
}

我已经尝试解决这个问题大约一个小时,但我就是不能,有人可以帮忙吗?

【问题讨论】:

  • 究竟是什么错误?哪条线?
  • 您的leftright 是函数。顺便说一句,至少在有错误的行上发表评论将不胜感激。
  • 在这一行得到它: node *node = right->getPrevious();在 right = node; 中也出现同样的错误;
  • T left();T right(); 表示这些应该是成员函数,而不是成员变量。我怀疑这不是您的本意,因为您从未定义过函数。
  • 题外话:你缺少Include Guards 可能会以意想不到的痛苦方式咬你。

标签: c++ queue nodes


【解决方案1】:

您将leftright 声明为函数。但是从您在其余代码中使用它们的方式可以清楚地看出它们应该是变量。

class Dequeue
{
    public:
        void pushLeft(T data);
        void popLeft();
        T left;
        void pushRight(T data);
        void popRight();
        T right;
        bool empty();
    private:
        int length;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多