【问题标题】:I am getting a void value not ignored as it ought to be error why?我得到一个没有被忽略的空值,因为它应该是错误的,为什么?
【发布时间】:2019-10-27 19:08:28
【问题描述】:

带有 1 个int 参数的旋转函数无效。我不知道为什么我会收到这个错误。它只是一个带有 2 个语句的 void 函数。

head_ptr_ 是私有链表变量。

getNodeAt 返回给定位置“position”的节点。由于它正在返回一个节点,我们可以从右到左访问其成员分配工作。它在分配之前完成操作数右侧的所有内容。如果我错了,请随时修正我的知识。

template <class T>
void LinkedList<T>::rotate(int k)
{
    head_ptr_ = getNodeAt(k)->setNext(head_ptr_);//error here
    head_ptr_ = getNodeAt(k-1)->setNext(nullptr);
}//end of rotate

template<class T>
Node<T>* LinkedList<T>::getNodeAt(int position) const
{
    // Count from the beginning of the chain
    Node<T>* cur_ptr = head_ptr_;
    for (int skip = 0; skip < position; skip++)
        cur_ptr = cur_ptr->getNext();

    return cur_ptr;
}  // end getNodeAt

int main()
{
    LinkedList<int> bag1;

    for(int i = 14;i >= 10;i--)
    {
        bag1.insert(bag1.getLength(),i);
    }
    bag1.print();
    cout << endl;
    //bag1.invert();
    bag1.rotate(3);
    bag1.print();

    system("PAUSE");
    return 0;
}

错误:应忽略的无效值

【问题讨论】:

  • getting this error - 什么错误?
  • setNext 有什么回报吗?
  • 我认为问题在于您不能为template 类提供单独的.cpp 文件。您必须将声明和定义放在一个文件中。
  • @KamilCuk 错误消息位于代码块底部。
  • 您的 setNext() 函数返回 void,您正在尝试将 setNext() 的返回值分配给变量。

标签: c++ error-handling linked-list void


【解决方案1】:

错误分析:

错误: void 值没有被忽略。

这是一条 GCC 错误消息,表示函数的返回值为“void”,但您正试图将其分配给非 void 变量。

您的特殊情况:
您的 setNext() 很可能返回 void 并且您正尝试将其返回结果存储到变量中,这就是为什么您收到您在旋转函数中发布的这两行代码中提到的错误:

head_ptr_ = getNodeAt(k)->setNext(head_ptr_);//error here
head_ptr_ = getNodeAt(k-1)->setNext(nullptr);

您可以通过两种方式解决问题:

第一种解决方案:
将您的代码更改为这样并应用必要的更改以保持相同的逻辑:

getNodeAt(k)->setNext(head_ptr_);
getNodeAt(k-1)->setNext(nullptr);

第二个解决方案:
更改您的 setNext() 函数以返回有效指针(不要忘记更改方法声明以返回 Node 指针):

template<class T>
Node<T>* LinkedList<T>::setNext(Node<T>* next)
{
    // same logic here as before
    return ptr; // where ptr is a valid pointer that you want to return
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多