我是一个学习计算机结构的新手。
在这种情况下
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!!
}
我如何传递失败或错误的信号??
谢谢你读了我那可怕的英语句子。我还在学英语,我的英语读得很好,但是,,,写作能力很差。
祝你一天愉快~
发布于 2020-03-03 12:46:29
您可以使用std::optional。确保在您的编译器中启用了C++17支持。如果你使用的是GCC或Clang,那就意味着在你的编译器标志中添加-std=c++17
(或者在旧版本的GCC/Clang中添加-std=c++1z
)。
#include <optional>
class Node {
private:
int data;
public:
Node(int num);
std::optional<int> AddNum(int num);
};
Node::Node(int num) : data(num) {}
std::optional<int> Node::AddNum(const int num)
{
if (data + num > 10) {
return num;
}
// Returns a default-constructed optional, which is empty.
return {};
}
调用AddNum()
时,必须检查返回的optional是否为空:
auto result = some_node.AddNum(some_number);
if (result) {
// OK.
std::cout << "the result is: " << *result;
} else {
// Error. No result.
}
要从optional中获取值,可以使用*
运算符,就像使用指针一样。或者,您可以改用value()
成员函数:
std::cout << "the result is: " << result.value();
如果你试图从一个空的optional中获取一个值,将会抛出一个运行时异常。
发布于 2020-03-03 12:43:37
函数AddNum
返回int
,所以不能返回bool
。因此,在这种情况下,您有几个选择:
bool
,并通过引用将结果传递回参数。例如:bool Node::AddNum(int num, int& result)
{
if (condition)
{
result = num;
return true;
}
else
{
result = 0;
return false;
}
}
你可以这样调用这个函数:
Node n;
int result;
bool success = n.AddNum(num, result);
而对此表示不满
int Node::AddNum(int num)
{
if (condition)
{
return num;
}
else
{
throw std::invalid_argument("Invalid argument");
}
}
Of course the caller would need to handle the exception.
发布于 2020-03-03 14:16:18
您可以返回包装在结构或自定义结构中的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);
}
https://stackoverflow.com/questions/60500034
复制相似问题