[英]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.