Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строка в VC2008 
:(
    Опции темы
Evgen24
Дата 6.1.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 31.7.2007
Где: Россия

Репутация: нет
Всего: нет



    Сегодня поставил себе Visual Studio 2008 и сталкнулся с такой проблемой. Я пишу:

Код


void CEx1View::OnDraw(CDC* pDC)
{
    pDC->TextOut(0, 0, "привет");



а она мне отвечает:

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'

как же тут строку на экран вывести?
PM MAIL ICQ   Вверх
vinter
Дата 6.1.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Код

pDC->TextOut(0, 0, CString( _T( "привет" ) ) );



--------------------
Мой блог
PM MAIL WWW   Вверх
Kallikanzarid
Дата 6.1.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Это что-то странное. Либо МФЦ еще более хреновая библиотека, чем я думал, либо у тебя в настройках проставлен Юникод.
PM MAIL   Вверх
Evgen24
Дата 6.1.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 31.7.2007
Где: Россия

Репутация: нет
Всего: нет



Что за Юникод? как его отключить?
PM MAIL ICQ   Вверх
Kallikanzarid
Дата 6.1.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Раз не знаешь, значит включен smile Юникод - это, упрощенно, двухбайтовая кодировка с наборами символов для большинства языков мира. Тип символа для строк Юникода - wchar_t. Твоя программа не компилируется, потому что при включенном Юникоде класс CString переходит на со строк char* на wchar_t*.

Решение проблемы - вместо char* используй LPCTSTR и LPTSTR, вместо char - TCHAR, вместо "строковый литерал" - _T( "строковый литерал" ). Тогда программа будет работать и с Юникодом, и без. Явно вызывать конструктор, как в примере выше, необязательно.
PM MAIL   Вверх
vinter
Дата 6.1.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(Kallikanzarid @  6.1.2009,  23:52 Найти цитируемый пост)
Явно вызывать конструктор, как в примере выше, необязательно.

нигде выше никаких явных конструкторов нет ;)


--------------------
Мой блог
PM MAIL WWW   Вверх
Kallikanzarid
Дата 7.1.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



А CString - это не?
PM MAIL   Вверх
vinter
Дата 7.1.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



нет, это преобразование типа - явное.


--------------------
Мой блог
PM MAIL WWW   Вверх
Kallikanzarid
Дата 7.1.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Учи матчасть. Это явное создание объекта, а явное создание объекта подразумевает вызов конструктора. Если бы ты сделал reinterpret_cast<CString>, я бы с тобой согласился.
PM MAIL   Вверх
vinter
Дата 7.1.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(Kallikanzarid @  7.1.2009,  11:06 Найти цитируемый пост)
Учи матчасть

могу тебе посоветовать тоже самое ;)
Цитата(Kallikanzarid @  7.1.2009,  11:06 Найти цитируемый пост)
а явное создание объекта подразумевает вызов конструктора

это называется преобразование типа, вызов конструктора тут следствие, а не причина.


--------------------
Мой блог
PM MAIL WWW   Вверх
Kallikanzarid
Дата 7.1.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Притянуто за уши. Так можно любое создание объекта с параметрами назвать преобразованием типа.
PM MAIL   Вверх
vinter
Дата 7.1.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



это не притянуто за уши, это название конструкции языка. Споры вокруг этого бессмысленны, т.к эта конструкция означает приведение типа, а не явный вызов конструктора. Ты можешь спорить с этим сколько угодно, но в С++ оно значит, то, что значит и ничего более


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 7.1.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Kallikanzarid и vinter, Вы не о том спорите.
ИМХО, спор должен быть о необходимости явного преобразования в вышеупомяннутой конструкции. В чем лично я сильно сомнваюсь..

P.S. в терминах придерживаюсь позиции vinterа.

Это сообщение отредактировал(а) mes - 7.1.2009, 15:17


--------------------
PM MAIL WWW   Вверх
Evgen24
Дата 7.1.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 31.7.2007
Где: Россия

Репутация: нет
Всего: нет



Охх, это что теперь чтобы в VS2008 строку в кавычках написать нужно постоянно тип преобразовывать? 
PM MAIL ICQ   Вверх
vinter
Дата 7.1.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(Evgen24 @  7.1.2009,  16:14 Найти цитируемый пост)
Охх, это что теперь чтобы в VS2008 строку в кавычках написать нужно постоянно тип преобразовывать? 

нет, но так нагляднее


--------------------
Мой блог
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1117 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.