是否存在“警告:控制到达非无效函数[-Wreturn-type]的末尾”的合理解决方法?

洛克什·梅赫(Lokesh Meher)

我已经使用链表这样为堆栈实现了一个简单的模板化类:

template <typename T>
struct Element
{
    T data;
    Element<T> *next;
};

template <typename T>
class Stack
{
private:
    Element<T> *m_top;

public:
    Stack();   // create an empty stack
    void push(T value);
    T pop();
    T top();
    bool isEmpty();
};

在的实现中top()返回存储在堆栈顶部元素中的值而不删除它的实现中,出现以下错误:

warning: control reaches end of non-void function [-Wreturn-type]

我已启用的-std=c++11 -pedantic -Wall选项g++这是top()

template <typename T>
T Stack<T>::top()
{
    if (this->isEmpty()) // isEmpty() returns true if m_top == nullptr, false otherwise
    {
        std::cerr << "Stack empty!" << std::endl;
    }
    else
    {
        return m_top->data;
    }
}

由于只有两个可能的值-堆栈是否为空,因此if-else构造。但是,在if语句之后子句中放置什么,std::cerr以使编译器满意并没有得到警告?我不能简单地发表一条return;声明,因为编译器希望返回一个值。同样,如果堆栈为空,则不返回任何内容。

附加帮助:
如果您知道程序的逻辑是正确的,那么让编译器抱怨是个好习惯吗?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

在像您这样的情况下,当逻辑上不返回任何内容时,您应该引发异常以使程序停止:

if (this->isEmpty())  {
    std::cerr << "Stack empty!" << std::endl;
    throw std::logic_error( "calling top when stack is empty is illegal" );
} else {
    return m_top->data;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

警告:控制到达非无效函数的结尾[-Wreturn-type]

来自分类Dev

警告:控件可能会到达非无效函数的结尾[-Wreturn-type]}

来自分类Dev

C,错误:控制到达非空函数的末尾[-Werror,-Wreturn-type]

来自分类Dev

警告:控制可能会达到非无效功能的结束[-Wreturn-type]

来自分类Dev

警告:控制可能会达到非无效功能的结束[-Wreturn-type]

来自分类Dev

警告:控制到达非无效函数的末尾

来自分类Dev

使wreturn类型为错误,而不是警告?

来自分类Dev

C中的“控制到达非无效函数的末尾”

来自分类Dev

如何解决“控制到达非空函数结束”警告?

来自分类Dev

控制到达非无效函数的结尾[-Werror = return-type]

来自分类Dev

函数返回本地变量[-Wreturn-local-addr]的地址

来自分类Dev

为什么“控制到达非无效功能的末尾”只是一个警告?合法吗

来自分类Dev

在释放模式下避免“控制到达非空函数结束”警告的最佳方法

来自分类Dev

在释放模式下避免“控制到达非空函数结束”警告的最佳方法

来自分类Dev

警告:返回了局部变量“ angles”的地址[-Wreturn-local-addr]

来自分类Dev

控制到达非无效函数警告的结尾c ++

来自分类Dev

控制可能会到达非空函数的末尾。频率

来自分类Dev

控制到达非空函数的末尾,C++

来自分类Dev

iOS Objective-C阻止警告:控件到达非空函数的末尾

来自分类Dev

比较警告可能的解决方法

来自分类Dev

通过枚举类型的完全处理的案例切换,“控制到达非void函数的末尾”

来自分类Dev

控制可能会到达非空函数Xcode C ++的末尾

来自分类Dev

嵌套函数相等的解决方法

来自分类Dev

Android MediaPlayer SeekTo函数解决方法

来自分类Dev

传递成员函数(或解决方法)

来自分类Dev

Android MediaPlayer SeekTo函数解决方法

来自分类Dev

是否存在gcutil adddisk失败的解决方法?

来自分类Dev

是否存在缺少类型类回溯的解决方法?

来自分类Dev

为什么我会收到“警告:控制权在开关情况下到达非无效函数的结尾”?

Related 相关文章

  1. 1

    警告:控制到达非无效函数的结尾[-Wreturn-type]

  2. 2

    警告:控件可能会到达非无效函数的结尾[-Wreturn-type]}

  3. 3

    C,错误:控制到达非空函数的末尾[-Werror,-Wreturn-type]

  4. 4

    警告:控制可能会达到非无效功能的结束[-Wreturn-type]

  5. 5

    警告:控制可能会达到非无效功能的结束[-Wreturn-type]

  6. 6

    警告:控制到达非无效函数的末尾

  7. 7

    使wreturn类型为错误,而不是警告?

  8. 8

    C中的“控制到达非无效函数的末尾”

  9. 9

    如何解决“控制到达非空函数结束”警告?

  10. 10

    控制到达非无效函数的结尾[-Werror = return-type]

  11. 11

    函数返回本地变量[-Wreturn-local-addr]的地址

  12. 12

    为什么“控制到达非无效功能的末尾”只是一个警告?合法吗

  13. 13

    在释放模式下避免“控制到达非空函数结束”警告的最佳方法

  14. 14

    在释放模式下避免“控制到达非空函数结束”警告的最佳方法

  15. 15

    警告:返回了局部变量“ angles”的地址[-Wreturn-local-addr]

  16. 16

    控制到达非无效函数警告的结尾c ++

  17. 17

    控制可能会到达非空函数的末尾。频率

  18. 18

    控制到达非空函数的末尾,C++

  19. 19

    iOS Objective-C阻止警告:控件到达非空函数的末尾

  20. 20

    比较警告可能的解决方法

  21. 21

    通过枚举类型的完全处理的案例切换,“控制到达非void函数的末尾”

  22. 22

    控制可能会到达非空函数Xcode C ++的末尾

  23. 23

    嵌套函数相等的解决方法

  24. 24

    Android MediaPlayer SeekTo函数解决方法

  25. 25

    传递成员函数(或解决方法)

  26. 26

    Android MediaPlayer SeekTo函数解决方法

  27. 27

    是否存在gcutil adddisk失败的解决方法?

  28. 28

    是否存在缺少类型类回溯的解决方法?

  29. 29

    为什么我会收到“警告:控制权在开关情况下到达非无效函数的结尾”?

热门标签

归档