我想像当今所有解释器一样发出动态错误消息,例如:
Name error: Undefined variable
将是不变的,但我想要达到的是:
Name error: Undefined variable 'X', in line 1
好的。行号确实没问题:每个错误消息都必须有行号,所以我将其添加到错误发射器函数中:
Error( ErrType type, string msg, int line );
那么我的问题出在哪里?
如何将'X'
放入 undefined variable *
中?
- 我无法使用 sprintf,因为它不支持字符串,但我在任何地方都使用它们
- 我不能简单地使用 cout 并连接所有内容,因为我希望可以抑制错误消息
- 我想将所有内容都放入一个函数中,如上面的
Error()
如何组合动态错误消息?
例如:Error( Name, sprintf(" undefined variable %s", myVariableName ), lineNum );
(但是 myVariableName
是一个字符串,sprintf
会把事情搞砸)
最佳答案
您可以通过调用 c_str
从 myVariableName
获取以 null 结尾的 C 字符串:
myVariableName.c_str()
请注意,您对 sprintf
的使用不正确; sprintf
的第一个参数采用用于放置格式化字符串的缓冲区。如果您在程序中使用 std::string
,为什么还要使用 sprintf
呢?如果 Error
采用 std::string
那么你可以只使用字符串连接:
Error(Name, "Undefined variable " + myVariableName, lineNum);
关于C++解释器: How to emit error messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662554/