我收到以下错误:
错误:类型为“const char [8]”和“const char [7]”的无效操作数到二进制“operator<<”
使用以下代码。知道为什么吗?
#include <sstream> // std::stringstream
#define logStream(MSG) _logStream(MSG)
void _logStream(std::string MSG)
{
std::stringstream _trace_stream_;
_trace_stream_ << "logStream: " << MSG << std::endl;
}
int main()
{
logStream("Hello, " << "world!"); // compile error here
return 0;
}
但是,使用内联 logStream 宏时不会出现编译错误。
#include <sstream> // std::stringstream
#define logStream(MSG) { \
std::stringstream trace_stream; \
trace_stream << "logStream: " << MSG << std::endl; \
}
int main()
{
logStream("Hello, " << "world!");
return 0;
}
为什么?
logStream("Hello, " << "world!")
operator<<
对于两个参数都是字符串文字(又名const char[n]
)的情况,没有重载。
operator<<
对于参数之一是流的情况,有一个重载。但是流仅在您的函数中创建logStream()
。当您将参数传递给函数时,它尚不可用。
为了解决多值记录相结合的问题,你可以使用operator+
的std::string
:
logStream(std::string("Hello, ") + "world!");
同样,如果参数之一是数字:
logStream(std::string("Hello, ") + "world " + std::to_string(42) + "!" );
这个问题没有被标记为 C++14,但这是你可以通过使用新的字符串文字运算符来添加一些语法糖的方法:
using namespace std::string_literals;
logStream("Hello, "s + "world!");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句