[英]C++ concatenation between literal and constant
我是 C++ 的新手,我想知道为什么下面的行不正确。 (SERVER_NAME 已定义为常量)
L"Initial Catalog=DatabaseName;Data Source=" << SERVER_NAME << ";"
我收到这些错误:
error C2296: '<<' : illegal, left operand has type 'const wchar_t [...'
error C2308: concatenating mismatched strings
谢谢
operator<< 不是连接运算符,它是 stream 类型的特殊重载运算符,可让您将数据发送到 stream。 它仅在您使用 stream 时才有效。
您在这里有两个选择。 首先,您可以使用 std::wstring:
std::wstring(L"Initial Catalog=DatabaseName;Data Source=") + SERVER_NAME + L";";
或者您可以使用 wstringstream(来自<sstream>
标头):
std::wstringstream stream;
stream << L"Initial Catalog=DatabaseName;Data Source=" << SERVER_NAME << L";"
在这种情况下,使用stream.str()
获取结果字符串。 stream 方法的优点是即使不是所有要连接的东西都已经是字符串,也可以使用它。
如果您要打印到现有的 stream(如 wcout),您当然可以跳过字符串流并直接使用它。
正如其他答案所指出的,您可以使用L"Initial Catalog=DatabaseName;Data Source=" SERVER_NAME L";"
如果 SERVER_NAME 是使用#define 创建的常量。 但是,如果它是一个const wchar_t*
则不起作用。
<<
和>>
不是连接运算符,而是按位移位运算符,完全不相关。
这对初学者来说很困惑,因为它们已经被cout
和cin
重载以表示完全不同的东西。
C 和 C++ 中字符串文字的连接无需特殊运算符,因此只需键入:
L"Initial Catalog=DatabaseName;Data Source=" SERVER_NAME L";"
SERVER_NAME
可能不是宽字符串。 但是,绝对有问题的是您的";"
不是宽字符串。 尝试使用L";"
如果要连接此字符串,请使用 std::stringstream
std::stringstream ss;
ss << "Initial Catalog=DatabaseName;Data Source=" << SERVER_NAME << ";";
std::string final = ss.str();
std::wstring connectionString = "Initial Catalog=DatabaseName;Data Source=";
connectionString += SERVER_NAME + ";";
确保将SERVER_NAME
定义为宽字符串,如下所示:
const wchar_t *SERVER_NAME = L"testdb";
或者,
std::wstring SERVER_NAME = L"testdb";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.