这里是在 <stdexcept>
中定义的一个异常:
class length_error : public logic_error
{
public:
explicit length_error(const string& __arg);
};
这是我的异常:
#include <string>
#include <stdexcept>
using namespace std;
class rpn_expression_error : public logic_error
{
public:
explicit rpn_expression_error(const string& __arg);
};
为什么当没有使用
<stdexcept>
时会出现这个错误?Undefined symbols:
rpn_expression_error::rpn_expression_error(/*string*/ const&), referenced from:
...
ld: symbol(s) not found
根据 @sbi 的要求,这是我目前代码的最小示例:
#include <string>
#include <iostream>
#include <stdexcept>
using namespace std;
class RPN_Calculator {
public:
class rpn_expression_error : public logic_error {
public:
explicit rpn_expression_error(const string& arg) : logic_error(arg) {}
};
void Execute() {
throw rpn_expression_error("Hello");
}
};
int main() {
RPN_Calculator calc;
try {
calc.Execute();
} catch (exception e) {
cout << e.what() << endl;
}
}
我将其保存为rpn.cpp
并运行make rpn
以产生错误。
现在代码已经完全建立,但是实际程序仍然给出原始错误。
注意/解决方案:虽然上面的代码运行得很好,但是在实际代码中相同的异常类仍然会产生链接器错误。为了简化起见,我只需将rpn_expression_error
提升为自己的全局范围类,似乎问题已经解决了。
rpn_expression_error
构造函数?并且你确定将定义限定为rpn_expression_error::rpn_expression_error
吗?相应的目标文件是否被链接到可执行文件中?如果其中一个或多个条件不成立,那么这就是你会遇到的错误类型。 - Tyler McHenry