| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Строка в VC2008 |
| Автор: Evgen24 6.1.2009, 22:00 | ||
Сегодня поставил себе Visual Studio 2008 и сталкнулся с такой проблемой. Я пишу:
а она мне отвечает: microsoft visual studio 9.0\vc\myprojects\ex1\ex1\ex1view.cpp(50) : error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'const char [14]' to 'const CString &' 1> Reason: cannot convert from 'const char [14]' to 'const CString' как же тут строку на экран вывести? |
| Автор: vinter 6.1.2009, 22:26 | ||
|
| Автор: Kallikanzarid 6.1.2009, 22:27 |
| Это что-то странное. Либо МФЦ еще более хреновая библиотека, чем я думал, либо у тебя в настройках проставлен Юникод. |
| Автор: Evgen24 6.1.2009, 22:43 |
| Что за Юникод? как его отключить? |
| Автор: Kallikanzarid 6.1.2009, 22:52 |
| Раз не знаешь, значит включен Решение проблемы - вместо char* используй LPCTSTR и LPTSTR, вместо char - TCHAR, вместо "строковый литерал" - _T( "строковый литерал" ). Тогда программа будет работать и с Юникодом, и без. Явно вызывать конструктор, как в примере выше, необязательно. |
| Автор: vinter 6.1.2009, 23:09 | ||
нигде выше никаких явных конструкторов нет ;) |
| Автор: Kallikanzarid 7.1.2009, 08:22 |
| А CString - это не? |
| Автор: vinter 7.1.2009, 09:54 |
| нет, это преобразование типа - явное. |
| Автор: Kallikanzarid 7.1.2009, 10:06 |
| Учи матчасть. Это явное создание объекта, а явное создание объекта подразумевает вызов конструктора. Если бы ты сделал reinterpret_cast<CString>, я бы с тобой согласился. |
| Автор: vinter 7.1.2009, 11:31 |
могу тебе посоветовать тоже самое ;) это называется преобразование типа, вызов конструктора тут следствие, а не причина. |
| Автор: Kallikanzarid 7.1.2009, 14:42 |
| Притянуто за уши. Так можно любое создание объекта с параметрами назвать преобразованием типа. |
| Автор: vinter 7.1.2009, 14:52 |
| это не притянуто за уши, это название конструкции языка. Споры вокруг этого бессмысленны, т.к эта конструкция означает приведение типа, а не явный вызов конструктора. Ты можешь спорить с этим сколько угодно, но в С++ оно значит, то, что значит и ничего более |
| Автор: mes 7.1.2009, 15:11 |
| Kallikanzarid и vinter, Вы не о том спорите. ИМХО, спор должен быть о необходимости явного преобразования в вышеупомяннутой конструкции. В чем лично я сильно сомнваюсь.. P.S. в терминах придерживаюсь позиции vinterа. |
| Автор: Evgen24 7.1.2009, 15:14 |
| Охх, это что теперь чтобы в VS2008 строку в кавычках написать нужно постоянно тип преобразовывать? |
| Автор: vinter 7.1.2009, 15:23 | ||
нет, но так нагляднее |
| Автор: Evgen24 7.1.2009, 15:29 |
так а как же обойтись без приведения типа? |
| Автор: vinter 7.1.2009, 15:50 |
| в моем посту главное макрос _T(...), а не приведение типа, его можешь убрать. Этот макрос пустой при отсутсвии юникода и раскрывается в L если юникод включен. |