Прекрасно компилируется в codeblocks а в Visual studio выдает
error C2664 cannot convert argument 1 from 'const wchar_t [9]' to 'TCHAR *' message : Conversion from string literal loses const qualifier (see /Zc:strictStrings) message : see declaration of 'MessageBoxPrintf'
В чем причина?
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int CDECL MessageBoxPrintf(TCHAR* szCaption, TCHAR* szFormat, ...)
{
TCHAR szBuffer[1024];
va_list pArgList;
// The va_start macro (defined in STDARG.H) is usually equivalent to:
// pArgList = (char *) &szFormat + sizeof (szFormat) ;
va_start(pArgList, szFormat);
// The last argument to wvsprintf points to the arguments
wprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR),
szFormat, pArgList);
// The va_end macro just zeroes out pArgList for no good reason
va_end(pArgList);
return MessageBox(NULL, szBuffer, szCaption, 0);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen;
cxScreen = GetSystemMetrics(SM_CXSCREEN);
cyScreen = GetSystemMetrics(SM_CYSCREEN);
MessageBoxPrintf(TEXT("ScrnSize"),
TEXT("The screen is %i pixels wide by %i pixels high."),
cxScreen, cyScreen);
return 0;
}
пример и книжки Charles Petzold Programming Windows 5th Ed
В языке С++ строковые литералы не разрешается неявно преобразовывать к указателям на не-константу, о чем вам и говорит компилятор. Функция MessageBoxPrintf
должна быть объявлена с параметрами типа const TCHAR *
, а не TCHAR *
.
А книжка ваша была написана во времена динозавров, то есть во времена первого стандарта С++98, в котором такое неявно преобразование разрешалось для совместимости с C.
То, что у вас это "прекрасно компилируется в codeblocks" возможно означает что ваш codeblocks работает в старинном режиме C++98. Есть также вероятность, что в codeblocks вы компилировали этот код в режиме С.
Также, здесь написана белиберда
wprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR),
szFormat, pArgList);
Подозреваю, что имелся в виду vswprintf
? В книге использован именно wprintf
?
Также, использование va_list
требует <stdarg.h>
, а использование vswprintf
требует <wchar.h>
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На фото есть кривая, которая в общем случае через каждые Δx состоит из двух точек (в реальности это координаты двух рядом проложенных проводов)
Какие преимущества дает использование 64-bit кода и 32-bit данных?
Вот такой кодПри выполнении ввожу: 5, (1,2,3,4,5), 5 (6,7,8,9,10), получаю -858993460 -858993460 -858993460 -858993460 -858993460 1 2 3 4 5
Я хочу воспользоваться методами библиотеки Eigen для решения СЛАУЯ взяла пример из файла документации и проект не компилируется