C++ 在开关的default子句中引发自定义异常将生成单个字符

C++ 在开关的default子句中引发自定义异常将生成单个字符,c++,C++,我有一个自定义的异常,我正在使用它捕获我正在处理的整个学校项目中的不同错误 class WrongValueException : public std::runtime_error { public: WrongValueException(std::string mess): std::runtime_error(mess) {}; }; 问题是我在下面switch语句的default子句中使用了“throw-errowalueexception”(“Error:Syntax”);

我有一个自定义的异常,我正在使用它捕获我正在处理的整个学校项目中的不同错误

class WrongValueException : public std::runtime_error
{
public:
    WrongValueException(std::string mess): std::runtime_error(mess) {};
};
问题是我在下面switch语句的default子句中使用了“throw-errowalueexception”(“Error:Syntax”);时

Expression* SubExpression::parse()
{
    Expression* left;
    Expression* right;
    char operation, paren;

    left = Operand::parse();
    cin >> operation;
    right = Operand::parse();
    cin >> paren;
    switch (operation)
    {
        case '+':
            return new Plus(left, right);
        case '-':
            return new Minus(left, right);
        case '*':
            return new Times(left, right);
        case '/':
            return new Divide(left, right);
        default:
            throw WrongValueException("Error: Syntax - " + operation);
    }
    return 0;
}
基本上,传递给swtich语句的字符应该是swtich语句中列出的运算符之一,如果不是,我想抛出异常。当抛出异常时,我得到的只是一个字符,它会根据输入中给定的字符进行更改

我捕获了main函数中的错误

输入和输出的示例包括:

Enter expression: (5^x),x=2;
#
Press any key to continue . . .

Enter expression: (5&x),x=2;
T
Press any key to continue . . .

“按任意键继续”上方的单个字符。。。“是指操作员改变时发生的变化。我已经成功地为我的程序中的其他一些检查实现了这个错误捕获,并将气泡抛出到主try/catch子句中,没有问题。这是唯一的一个。

您不应该将+与字符串文字一起使用。它的行为与您的想法不同。你应该先对字符串进行转换

throw WrongValueException(std::string("Error: Syntax - ") + operation);
否则,传递的字符地址的偏移量等于
操作的数值<代码>“Hello”+1
是指向
'e'
的指针。在你的例子中,你越界了,你基本上有了未定义的行为。

错误:语法-“+操作
中,你将
字符
添加到
常量字符*
。这将执行指针添加而不是字符串连接,因为不涉及
std::string

首先将其中一个操作数强制转换为
string

std::string("Error: Syntax - ") + operation

我将返回到我的其他异常并更正此错误。非常感谢。