【问题标题】:Addition of default argument makes this constructor a default constructor [closed]添加默认参数使此构造函数成为默认构造函数[关闭]
【发布时间】:2013-01-12 16:51:42
【问题描述】:

我正在尝试运行以下简单代码,但不断得到:

libc++abi.dylib: terminate called throwing an exception

请大家解释一下这是什么意思?

代码:

int main()
{
    ifstream in;
    cout << "Enter name: ";
    string s = GetLine();
    in.open(s.c_str());
    if (in.fail())
        Error("Error your file was not found");
    return 0;
}

错误来自以下:

ErrorException::ErrorException(string m="unspecified custom error") 
: msg(m) {
}

ErrorException::~ErrorException() throw() {}

const char* ErrorException::what() const throw() {
return this->msg.c_str(); 
}

void Error(string str) {
    ErrorException err(str);
    throw err;
}

我应该得到我指定的错误消息,但我没有;谁能明白为什么?

【问题讨论】:

  • 这和你的问题标题有什么关系?
  • “取回错误信息”是什么意思?您希望错误消息去哪里?

标签: c++ arguments default


【解决方案1】:

你抛出了一个你没有捕捉到的异常。这会终止程序。您没有代码来接收错误消息、打印它或执行任何类似操作。如果要捕获异常,请使用 try/catch 块。在catch 部分,您可以对错误消息进行任何操作。

尝试类似:

int main()
{
    ifstream in;
    cout << "Enter name: ";
    string s = GetLine();
    try
    {
       in.open(s.c_str());
       if (in.fail())
           Error("Error your file was not found");
    }
    catch (ErrorException& e)
    {
       cerr << e.what() << endl;
    }
    return 0;
}

【讨论】:

  • 我期待如果它找不到文件,它会告诉用户“错误您的文件未找到”。
  • @BenjaminRCBell:您认为会告诉用户某事的“它”是什么?您的代码不包含任何可以告诉用户的内容。 (它如何告诉用户任何事情?它如何知道如何联系用户?它应该弹出一个窗口吗?发送电子邮件?写信给stderr?还是什么?)跨度>
  • 只是将默认错误或我指定的错误消息返回到控制台。此代码来自在线大学课程。错误函数是由试图重构大学提供的头包的人重写的(不再在线提供)。提供这些标题是为了帮助学生在学习过程中无需处理某些往往更复杂的事情。当我说它时,我想我指的是 in.open(s.c_str());
  • @BenjaminRCBell:没有人知道这是一条错误消息或应该将其发送到控制台。编译器知道有一个名为what 的函数会返回该字符串。但是没有任何代码表明将该字符串输出到控制台会很有用。如果你想要它,你需要写它。将方法命名为 what 并没有什么神奇之处。如果你想调用它,你仍然必须调用它。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 2014-05-08
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2016-07-15
  • 2023-03-20
  • 2016-07-23
相关资源
最近更新 更多