2010-01-14 1 views
1

нужно войти содержание BUF с помощью LogMethod() ниже проблема заключается в том, что LogMethos принимает только "Уст CString &"Как создать CString из массива символов?

char buf[1024]; 
strcpy(buf, cErrorMsg); 

// need to pass to LogMethod "buf" how do i do that? 
log.LogMethod(const CString &); 

Thans Rev

Перевернутое

+1

Что такое 'CString'? вы ссылаетесь на ATL/MFC? В C++ стандартная строка - 'std :: string'. 'CString' может быть любым, например, классом, закодированным коллегой в вашей базе кода. –

+0

//log.LogDebug(CString (buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); Ни один из приведенных выше кода не работал ... – Reversed

+0

Тогда проблема в другом месте. Покажите нам код для LogMethod. – avakar

ответ

1

Если вы говорите о MFC CString, насколько я могу судить, он должен иметь неявный конструктор, принимающий TCHAR const *. Другими словами, должно работать следующее.

log.LogMethod(buf); 

Если это не так, отправьте сообщение об ошибке.

+0

нет ошибки ..... просто не журнал – Reversed

0
CString cs; 
cs = buf; 

log.LogMethod(cs) 
+0

нет ошибки ..... просто не журнал – Reversed

1
log.LogMethod(CString(buf)); 

Это позволит избежать проблем, когда компилятор не будет автоматически создавать объект CString, используя соответствующий конструктор, так как аргумент является ссылкой (Это было бы, если аргумент был «простым» CString).

+0

Не имеет значения, является ли параметр 'CString' или' CString const & ', в обоих случаях будет выполнено преобразование. В последнем случае создается временное и привязывается к ссылке. – avakar

+0

Это верно в общем случае преобразования, однако для CString это не так, потому что конструктор (принимающий char *) был объявлен явным, который, если я не ошибаюсь, не позволяет компилятору автоматически выбирать это для таких преобразований. Это говорит, что делает работу в VS6 (где он не отмечен явным), когда CString & является Const, но он не работает в VS2005 Причина: не удается преобразовать из «сопзЬ полукокса [5]» к «сопзЬ CString» Конструктор для класса «ATL :: CStringT » объявлен «явным» – Ruddy

+0

Я очень сомневаюсь, что Microsoft изменит объяснение между версиями, так как это сломает много существующего кода. Кроме того, документация (http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx) ясно показывает, что конструктор не является явным. Вы уверены, что не пытались компилировать в качестве Unicode, все еще передавая 'char const *' в качестве параметра (который действительно вызывает явный конструктор без TCHAR)? – avakar

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

  • Нет связанных вопросов^_^