2015-08-18 5 views
0

У меня есть старый файл на C++, который, как я знаю, используется для компиляции. Я создал новую установку Visual C++ версии 6.Ошибка C++ C2664 с CStrings

Я получаю много ошибок компиляции с CStrings о невозможности преобразовать в сопзЬ полукокса *

Вот пример.

CString dogs = "test"; 
writeoutfile(dogs, 1); 

void Crender::writeoutfile(CString data, long data_size) {} 

Я получаю эту ошибку:

error C2664: 'void __thiscall Crender::writeoutfile(const char *,long)' : cannot convert parameter 1 from 'class CString' to 'const char *'

Есть ли какой-то способ, которым я могу обойти это?

+3

Либо прототип 'writeoutfile' не соответствует реализации, которую вы там там (он ожидает' const char * ', а не' CString'), или вы где-то задали 'CString'' const char *'. –

+0

Совершенно верно. Я изменил файл cpp, но не h-файл. Раньше он использовал void writeoutfile (данные LPCSTR, long data_size = -1). Я изменил первый аргумент на CString, чтобы попытаться упростить эту проблему. –

ответ

0

Вы должны получить необработанный указатель на поле char. Это может быть сделано с

CString::GetBuffer() 

так что вы могли бы назвать

writeoutfile(dogs.GetBuffer(), 1); 
+0

Обратите внимание, что это отбрасывает любую информацию о кодировке и может привести к нечитаемым данным. – rubenvb

+0

GetBuffer требует аргумент min length. Что это должно быть? Он также возвращает неправильный тип. –

0

CString следует преобразовать в сопзЬ полукокса *. Это сборка Unicode? Это единственное объяснение, о котором я могу думать.

GetBuffer() предназначен для получения записываемого указателя на данные, содержащиеся внутри CString. Не делай этого!

Смежные вопросы