错误 C2440:'initializing':无法从
error C2440: 'initializing' : cannot convert from
在C++98中使用SQLite时,如何将stringstream
转换为Unicode并传递给sqlite3_exec()
?我经常遇到这个错误:
error C2440: 'initializing' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>' to 'std::basic_string<_Elem,_Traits,_Ax>'
1> with"
代码:
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
const char* data = "Callback function called";
tstringstream tstrsSQL;
tstrsSQL.imbue(std::locale("C"));
std::string s = tstrsSQL.str(); // converting stringstream to char?
const char* p = s.c_str();
/* Open database */
rc = sqlite3_open("db.db3", &db);
if( rc ) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
} else {
fprintf(stderr, "Opened database successfully\n");
}
/* Create SQL statement */
tstrsSQL << _T("SELECT") something ("FROM") << table;
/* Execute SQL statement */
rc = sqlite3_exec(db, p, callback, (void*)data, &zErrMsg); // p needs to be unicode
你正在使用 tstringstream
,如果定义了 UNICODE
,我猜它会使用 std::wstringstream
,所以它的 str()
给出 std::basic_string<wchar_t>
.
但是你得到的结果是std::string
,也就是std::basic_string<char>
。所以赋值失败。
无论如何,你把结果用在 sqlite3_exec()
中,它需要一个 const char*
作为输入。
这就是为什么你不应该使用 tstringstream
,你应该使用 std::stringstream
,并从所有字符串文字中删除 _T
。
最小的、完整的、有效的代码:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
stringstream strstream;
strstream << "Hello World";
string str = strstream.str();
cout << str << endl;
return 0;
}
在C++98中使用SQLite时,如何将stringstream
转换为Unicode并传递给sqlite3_exec()
?我经常遇到这个错误:
error C2440: 'initializing' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>' to 'std::basic_string<_Elem,_Traits,_Ax>'
1> with"
代码:
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
const char* data = "Callback function called";
tstringstream tstrsSQL;
tstrsSQL.imbue(std::locale("C"));
std::string s = tstrsSQL.str(); // converting stringstream to char?
const char* p = s.c_str();
/* Open database */
rc = sqlite3_open("db.db3", &db);
if( rc ) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
} else {
fprintf(stderr, "Opened database successfully\n");
}
/* Create SQL statement */
tstrsSQL << _T("SELECT") something ("FROM") << table;
/* Execute SQL statement */
rc = sqlite3_exec(db, p, callback, (void*)data, &zErrMsg); // p needs to be unicode
你正在使用 tstringstream
,如果定义了 UNICODE
,我猜它会使用 std::wstringstream
,所以它的 str()
给出 std::basic_string<wchar_t>
.
但是你得到的结果是std::string
,也就是std::basic_string<char>
。所以赋值失败。
无论如何,你把结果用在 sqlite3_exec()
中,它需要一个 const char*
作为输入。
这就是为什么你不应该使用 tstringstream
,你应该使用 std::stringstream
,并从所有字符串文字中删除 _T
。
最小的、完整的、有效的代码:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
stringstream strstream;
strstream << "Hello World";
string str = strstream.str();
cout << str << endl;
return 0;
}