Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

CradleA
Статус: Мастер-Эксперт
Рейтинг: 25
∙ повысить рейтинг »
Лысков Игорь Витальевич
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »

С / С++

Номер выпуска:2028
Дата выхода:18.08.2021, 06:15
Администратор рассылки:CradleA (Мастер-Эксперт)
Подписчиков / экспертов:5 / 42
Вопросов / ответов:3 / 12

Консультация # 104196: Здраствуйте! В Visual Studio 2003 данный код работал: CMainWnd::CMainWnd() { Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы } А в Visual Studio 2005 работать отказывается - пишет error C2664: \'CFrameWnd::Create\' : cannot convert parameter 2 from \'const...
Консультация # 151051: Дана последовательность натуральных чисел аь аъ..., ап. Создать массив из четных чисел этой последовательности. Если та¬ких чисел нет, то вывести сообщение об этом факте. Решить задачу с применением действий над элементами массива. Решить данную задачу как можно проще.!...
Консультация # 87763: Привет экспертам! Не подскажете где можно посмотреть код системных функций (DOS or WIN). Например таких как fclose(), или CreateDirectory() ? И соответственно попробовать написать программу без вызова последних. Смотрел в папках include, соответствующие файлы *.h, ни черта там не понял. Не подскажете как...

Консультация # 104196:

Здраствуйте! В Visual Studio 2003 данный код работал:

CMainWnd::CMainWnd()
{

Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}

А в Visual Studio 2005 работать отказывается - пишет error C2664: \'CFrameWnd::Create\' : cannot convert parameter 2 from \'const char [6]\' to \'LPCTSTR.
С чем это связано и как эту проблему решить??? Помогите пожалуйста!

Дата отправки: 03.10.2007, 20:47
Вопрос задал: Veal
Всего ответов: 4
Страница онлайн-консультации »


Консультирует Gremlin:

Здравствуйте, Veal!
дело не студии, а в выборе чарсета, в 2005-й по умолчанию стоит юникод, для исправления, окаймляйте строковые константы маркером _T(), в вашем случае это будет так:

Create(NULL,_T("Label"),WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
или, в частном порядке:
Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
Управлять чарсетом можно отсюда: Project->Properties->General->Character Set

Консультировал: Gremlin
Дата отправки: 03.10.2007, 20:56
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ross:

Здравствуйте, Veal!

Попробуй написать так: Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL);

Консультировал: Ross
Дата отправки: 03.10.2007, 21:05
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Aristos:

Здравствуйте, Veal!

Это связано с тем, что в MFC используются обобщенные строки. То есть работа со строковыми типами (в частности LPCTSTR) ведется однообразным образом для ANSI строк (символ char - 1 байт) и для UNICODE строк (символ wchar_t - 2 и более байт).
Таким образом, в зависимости от настроек компилятора LPCTSTR может быть const char* или const wchar_t*. В вашем случае, видимо, UNICODE-вариант. Есть несколько решений:
1. Использовать wchar_t вместо char и оформлять строки как L"string" и отдельные символы как L\'c\'.
2. Изменить настройки в [Project]/[Properties]/[Configuration Properties]/[General].
3. Использовать обобщенные строки с помощью макроса TEXT("string") или _T("string").

Консультировал: Aristos
Дата отправки: 03.10.2007, 21:28
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Новак Александр Васильевич:

Здравствуйте, Veal!
И ещё хочется добавить, так для общего понимания, что по моему начиная с XP или чють пораньше Windows и весь её API`шный интерфейс работает под UNICODE – это соответствует вызовам API`шеек через суффикс на конце W.
И видимо на основании вышеизложенного Microsoft обратило на это внимание (чего-то она с этим не торопилась) и токо в VS 2005 в свойствах прэкта (Project/Properties во вкладке GENERAL по умолчанию при создании нового проекта ПАРАМЕТР Character Set выставляется Use Unicode Character Set) оно и понятно в этом случае не требуется переводить (фоново) из ANSCII to UNICODE.

Консультировал: Новак Александр Васильевич
Дата отправки: 04.10.2007, 20:25
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 151051:

Дана последовательность натуральных чисел аь аъ..., ап. Создать массив из четных чисел этой последовательности. Если та¬ких чисел нет, то вывести сообщение об этом факте.



Решить задачу с применением действий над элементами массива. Решить данную задачу как можно проще.!

Дата отправки: 19.11.2008, 11:12
Вопрос задал: Попов Александр Олегович
Всего ответов: 3
Страница онлайн-консультации »


Консультирует realbustard:

Здравствуйте, Попов Александр Олегович!
Код в приложении. Будут вопросы, задавайте в минифоруме.

Приложение:

Консультировал: realbustard
Дата отправки: 19.11.2008, 12:06
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Kamerad:

Здравствуйте, Попов Александр Олегович!

Предположим что последовательность уже есть

#include<iostream>

void main ()

{
int mas[20]; // исходная последовательность
int chet[20]; // массив с четными числами
int count=0;

for(int i=0;i<20;i++)

{
if(mas[i][j]>0)

{
chet[i]=mas[i];
count++; // считаем четные элементы
}

}

if(count==0)

{
cout<<"\nChetnych elementov net!\n";
}

}

Консультировал: Kamerad
Дата отправки: 19.11.2008, 12:39
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Терсков Сергей:

Здравствуйте, Попов Александр Олегович!
Задача очень просто решается с использованием класса vector из STL. Во время заполнения начального массива сразу проверяем его элементы на четность. Если элемент четный, заносим его в массив с четными элементами. Реализацию смотрите в коде

Код
#include <time.h>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

int main(int argc, char* argv[]) {

	int n = 10;

	vector<int> v(n);
	vector<int> v_even;

	srand((unsigned) time(NULL));

	int rand_limit = 100;

	cout << "Initial array:" << endl;

	for(int i=0; i<n; i++) {

		v[i] = rand()%rand_limit;

		if(v[i]%2 == 0)
			v_even.push_back(v[i]);

		cout << setw(4) << v[i];
	}

	cout << endl << "Array with even elements:" << endl;
	for(int i=0; i<v_even.size(); i++)
		cout << setw(4) << v_even[i];


  	return	0;
}

Консультировал: Терсков Сергей
Дата отправки: 20.11.2008, 04:05
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 87763:

Привет экспертам!

Не подскажете где можно посмотреть код системных функций (DOS or WIN).

Например таких как fclose(), или CreateDirectory() ?

И соответственно попробовать написать программу без вызова последних.

Смотрел в папках include, соответствующие файлы *.h, ни черта там не понял.

Не подскажете как и где правильно посмотреть, и соответ. написать.

Спасибо.

Дата отправки: 20.05.2007, 16:27
Вопрос задал: DEVILL
Всего ответов: 5
Страница онлайн-консультации »


Консультирует Dark Daskin:

Здравствуйте, DEVILL!
Исходники msvcrt (fopen, fclose, ...) лежат в папке Program Files\\Microsoft Visual Studio 8\\VC\\crt\\src\\
Исходники API-функций строго засекречены MS-ом. Впрочем, похожие функции можно посмотреть в исходниках ReactOS: http://svn.reactos.org/svn/reactos/

Консультировал: Dark Daskin
Дата отправки: 20.05.2007, 16:45
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Sov:

Здравствуйте, DEVILL!
Очень интересный вопрос. Про коды функций в win я ничего не слышал.
В общих чертах- когда вы вызываете функцию меняется ее имя на адрес, выполняется переход по этому адресу и выполняется код функции
Такого понятия "код функции" не существует

Консультировал: Sov
Дата отправки: 20.05.2007, 17:36
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует kool:

Здравствуйте, DEVILL!
fclose() в Win32 это оболочка
для более сложных вызовов API - фу-ций.
CreateDirectory() - возможно тоже ф-ция оболочка.
Их ассемблерный код можно посмотреть отладчиком уровня ядра.
Удачи!

Консультировал: kool
Дата отправки: 20.05.2007, 19:51
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ilkras:

Здравствуйте, DEVILL!
fclose() это не системная функция, а часть библиотеки. Посмотреть можно например в инсталляционной директории VisualC. У меня это находится в C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC, у вас может быть в другом месте.

Консультировал: Ilkras
Дата отправки: 20.05.2007, 20:36
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Proctozont:

Здравствуйте, DEVILL!
Берете отладчик, пишете маленькую програмку которая использует эти функции, и понеслась, а вообще если "Смотрел в папках include, соответствующие файлы *.h, ни черта там не понял.", то думаю это вам не поможет и всетаки придется их использовать.

Консультировал: Proctozont
Дата отправки: 20.05.2007, 22:41
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное