C++ (C+;+;)当函数返回类或结构之类的数据时,我希望返回错误或错误数据

C++ (C+;+;)当函数返回类或结构之类的数据时,我希望返回错误或错误数据,c++,return,C++,Return,我是学计算机结构的新手 在这种情况下 class Node{ private: int data; public: Node(int num); int AddNum(int num); } Node::Node(int num) : data(num) { } int::int AddNum(int num) { if(data + num > 10) return num; else return

我是学计算机结构的新手

在这种情况下

class Node{
   private:
      int data;
   public:
      Node(int num);
      int AddNum(int num);
}

Node::Node(int num) : data(num) {   }
int::int AddNum(int num)
{
   if(data + num > 10)
      return num;
   else
      return false; // this point!!
}
我如何传递失败或错误的信号

谢谢你读了我那可怕的英语句子。。我还在学英语 我的英语读得很好,但写作技巧很差:(


祝您度过愉快的一天~

函数
AddNum
返回
int
,因此您无法返回
bool
。在这种情况下,您有几个选项:

  • 将函数更改为返回一个指示成功或失败的
    bool
    ,并通过引用参数将结果传回。例如:
  • 你可以这样调用这个函数:

    Node n;
    int result;
    bool success = n.AddNum(num, result);
    
  • 抛出异常,尽管有时会根据具体情况对此表示不满:

  • 函数
    AddNum
    返回
    int
    ,因此不能返回
    bool
    。因此在这种情况下,您有几个选项:

  • 将函数更改为返回一个指示成功或失败的
    bool
    ,并通过引用参数将结果传回。例如:
  • 你可以这样调用这个函数:

    Node n;
    int result;
    bool success = n.AddNum(num, result);
    
  • 抛出异常,尽管有时会根据具体情况对此表示不满:
  • 您可以使用。确保在编译器中启用了C++17支持。如果您使用的是GCC或Clang,则意味着将
    -std=C++17
    添加到编译器标志中(或在旧版本的GCC/Clang中添加
    -std=C++1z

    要从可选项中获取值,可以像使用指针一样对其使用
    *
    运算符。或者,也可以使用
    value()
    成员函数:

    std::cout << "the result is: " << result.value();
    
    std::cout您可以使用。确保在编译器中启用了C++17支持。如果您使用的是GCC或Clang,则意味着将
    -std=C++17
    添加到编译器标志中(或在旧版本的GCC/Clang中为
    -std=C++1z

    要从可选项中获取值,可以像使用指针一样对其使用
    *
    运算符。或者,也可以使用
    value()
    成员函数:

    std::cout << "the result is: " << result.value();
    

    std::cout您可以返回
    std::pair
    或包装在结构中的联合或自定义结构或引发异常

    //Using pair. If first element is true, only then 
    //second element hold meaning
    int::int AddNum(int num)
    {
       if(data + num > 10)
          return make_pair(true, num);
       else
          return make_pair(false, -1);
    }
    

    您可以返回
    std::pair
    或包装在结构中的联合或自定义结构或引发异常

    //Using pair. If first element is true, only then 
    //second element hold meaning
    int::int AddNum(int num)
    {
       if(data + num > 10)
          return make_pair(true, num);
       else
          return make_pair(false, -1);
    }
    

    有各种各样的方法。如果不知道您的具体需求(不同于您要求的解决方案类型),就不可能建议哪些选项是合适的。一种简单的方法是向名为(比如)的结构/类添加成员<代码> iSuffix,根据需要在您的函数中设置该成员,并调用调用方应检查的文件。一种更具侵入性的方式,通常只在错误是关键的情况下使用,因此用户需要强制处理该原因,即抛出异常。BTW, INT:INT/INDEX>不是有效的C++。有各种方式。如果不知道您的具体需求(不同于您所要求的解决方案类型),则无法建议哪些选项是合适的。一种简单的方法是向名为(比如)的结构/类添加成员<代码> iSuffix,根据需要在您的函数中设置该成员,并调用调用方应检查的文件。一种更具侵入性的方式,通常只在错误是关键的情况下使用,因此用户需要强制处理该原因,即抛出异常。BTW,<代码> int:INT/COM>不是有效C++。谢谢!工作!!当我用韩语问这个问题的时候,人们不理解,即使我是韩国人…谢谢!我用过了!工作!!当我用韩语问这个问题的时候,人们甚至不懂韩语…谢谢你的好意!实际上,我对这个解决方案比上一个熟悉…因为我对C++的了解很少。STL……我必须多学习,多为你的好建议!事实上,我对这个解决方案比上一个熟悉…因为我对C++ STL了解得很少……我必须学习更多的东西。
    //Using pair. If first element is true, only then 
    //second element hold meaning
    int::int AddNum(int num)
    {
       if(data + num > 10)
          return make_pair(true, num);
       else
          return make_pair(false, -1);
    }