Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.173.166] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброй ночи!
Есть проблема. Исходник, который должен компилироваться, только не знаю чем. В коде конструкция: using blabla_t = unsigned int; Насколько я понял, это аналог паскальной конструкции type blabla = longword; Запихнул исходник в проект под Visual Studio. Компилятор матерится: Цитата error C2143: синтаксическая ошибка: отсутствие ";" перед "=" error C2873: blabla_t: использование символа в "using"-объявлении не допускается error C2513: int: нет переменных, объявленных перед "=" error C2062: тип "unsigned int" не требуется Что с этим кодом не так? Мне конечно ума хватит убрать переназвание типа и использовать везде unsigned int напрямую, но подобных ошибок далее по тексту еще десяток, и весь код переписывать нет никакого желания. Проект был создан как Visual C++ - общие - пустой проект. |
Сообщ.
#2
,
|
|
|
Эта конструкция для c++11 и далее. Для ранних же стандартов - компилятор ее не понимает.
|
Сообщ.
#3
,
|
|
|
Виталь, в С и старых версиях C++ нужное тебе пишется так
typedef unsigned int blabla_t; |
Сообщ.
#4
,
|
|
|
Ох и понапридумывали же конструкций. Спасибо, буду знать.
Можно еще для полноты картины - начиная с какой версии VS понимает c++11 и с какой c++18 ? Что-то у Майкрософта много воды налито, а сводной таблицы в понятном виде не нашел. |
Сообщ.
#6
,
|
|
|
Доброго времени суток!
Вопрос чуть по другой теме, но смежной. auto var123 = std::vector<int>{}; с последующими вызовами var123.push_back Цитата синтаксическая ошибка: отсутствие ";" перед "{" и параметры функции типа uintptr_t ругаются в теле функции при их использовании - "%name_of_var%" нельзя передать неявно, поскольку не задан режим передачи по умолчанию - это всё какой стандарт языка? Какая минимум студия нужна для того чтобы это откомпилировать? Говорю минимум потому что под эту задачу буду подымать отдельную виртуальную машину с виндой, и чем меньше гигабайт мусора буду ставить - тем быстрее решу поставленную задачу. |
Сообщ.
#7
,
|
|
|
Виталь, приведи участок кода, сделай синтетический пример - иначе маловато информации.
|
Сообщ.
#8
,
|
|
|
Вот кусок кода. Ругается на vector<int>{} (ошибка синтаксическая ошибка: отсутствие ";" перед "{") и на if (var2 && var3) (нельзя передать неявно, поскольку не задан режим передачи по умолчанию)
uintptr_t func1(const char* var1, uintptr_t var2, uintptr_t var3, int var4) { static auto var5 = [](const char* var6); { auto var123 = std::vector<int>{}; auto var2 = const_cast<char*>(var6); auto var3 = const_cast<char*>(var6) + strlen(var6); for (auto current = var2; current < var3; ++current) { if (*current == '?') { ++current; ... var123.push_back(-1); } else var123.push_back(strtoul(current, ¤t, 16)); } return var123; }; if (var2 && var3) { ... } ... } Хочу знать чем компилировать. 2010я Студия его не берет. Ставить тупо 2019 не хочу - нужен большой виртуальный диск и качать образ на 30+ Гб, да еще и окажется что на Windows 7 она не пойдет (последняя мода от Microsoft) и придется начинать с установки Windows 10 на виртуализацию, она сама по себе будет жестко тормозить. Образ каждой последующей версии Студии в несколько раз тяжелее предыдущей (винды - тоже). |
Сообщ.
#9
,
|
|
|
Цитата Виталь @ auto var123 = std::vector<int>{}; Это какое-то бесполезное использование auto. В данном случае оно ничего не сокращает. Пиши тупо std::vector<int> var123; и всё |
Сообщ.
#10
,
|
|
|
Внезапно.
Цитата fatal error C1001: Внутренняя ошибка в файле компилятора. (файл компилятора "msc1.cpp", строка 1420) Причина - const char* name HMODULE handle = GetModuleHandleA(name); В оригинале был GetModuleHandle, но он выдает error C2664: GetModuleHandleW: невозможно преобразовать параметр 1 из "const char *" в "LPCWSTR" (независимо от того, стоит ли в свойствах использование юникода) Оказывается, компилятор может падать. За всю историю использования Borland Delphi - ни разу такого не видел |
Сообщ.
#11
,
|
|
|
Цитата Виталь @ Пример кода неверный. Плохо соответствует реальному. Сделай, плз, ещё раз, но без ошибок. Если судить по тексту сообщения, то этот if() должен быть внутри лябмды, но там даже лямбда неправильно определена, её по сути нет. Компилер должен был бы стопнуться ещё на её заголовке.Вот кусок кода Цитата Виталь @ Так не бывает. Значит ты либо неправильно сказал использовать ANSI, либо подключил не те заголовки, если они от какой-нибудь сторонней либы, либо эта либа просто расчитана исключительно на юникод В оригинале был GetModuleHandle, но он выдает error C2664: GetModuleHandleW: невозможно преобразовать параметр 1 из "const char *" в "LPCWSTR" (независимо от того, стоит ли в свойствах использование юникода) Добавлено Цитата OpenGL @ Вообще не понимаю апологетов нового стиля инициализаторов. Везде суют {}, что только с толку сбивает. Это какое-то бесполезное использование auto. В данном случае оно ничего не сокращает. Пиши тупо std::vector<int> var123; и всё Добавлено P.S. VS2019 всё ещё умеет работать на любых Win7 с SP1. Что касается требуемых объёмов, тот тут всё зависит от набора компонентов. У меня стоит 2017 на ~20Гб, в которые включены базовые средства для C# и VB, отладчик JIT, инструменты статического и динамического анализа, наборы заголовков и библиотек для создания приложений под XP и API в совокупности трёх версий (ещё 7 и 8.1), плагины для полноценной поддержки GPU, библиотеки MFC и ATL (так ни разу и не воспользовался), RTL четырёх вариантов (статические/динамические, релиз/дебаг, естественно включая и упомянутые MFC с ALTем + ешё раз то же самое за ANSI/UNICODE для них) под три целевые исполнительные платформы x32, x64 и ARM с исходниками + беззаголовочные варианты при поддержке модулей, средства разработки под Android и два его эмулятора и Python обоих разрядностей. |
Сообщ.
#12
,
|
|
|
По поводу "странных" ошибок. Да, ты пытаешься относительно новые фишки языка использовать с древним компилятором, да еще и с необычным синтаксисом. При этом не самым удачным. Вон OpenGL написал как надо. Хотя твоя конструкция "съедается" компилятором, по крайней мере с++14, но она неоптимальна.
Цитата Виталь @ Ставить тупо 2019 не хочу - нужен большой виртуальный диск и качать образ на 30+ Гб, да еще и окажется что на Windows 7 она не пойдет (последняя мода от Microsoft) и придется начинать с установки Windows 10 на виртуализацию, она сама по себе будет жестко тормозить. А вот тут тебе присоветую, т.к. сам развернул среду разработки под Win7-x64. Не нужна тебе студия 2019, тебе нужно оттуда только компиляторы, линкеры и сопровождающий утиль. Поэтому делай следующим образом и обязательно в этом порядке: К примеру, мои наборы: ЗЫ: По поводу образа образа виртуального диска, чтобы не гадать, и чтобы потом не было мучительно больно в процессе установки и настройки ... Делай диск динамического размещения с указанием стартового размера не менее 30G. После установки/настройки - дефрагментация и сжатие. И все акеюшки ЗЗЫ: Забыл!!! перед установкой лучше всего снести все версии MS C++ Redistributable, потом нужно доставить обратно. У меня 2019 M$ Build Tools при установке вылетал с ошибкой, пока я на предварительно не снес установленные. |
Сообщ.
#13
,
|
|
|
Qt-то ему зачем, JoeUser?
|
Сообщ.
#14
,
|
|
|
Цитата Qraizer @ Qt-то ему зачем, JoeUser? Ну QtCraeator, как среда разработки - супер, и гораздо легче студии. При это на отличненько автоконфигурируется - самостоятельно находит компиляторы, отладчики, системы сборки ... Но просто сейчас отдельного инсталлятора QtCreator'а нет, он идет как часть всей поставки Qt5. Тут парится не следует - онлайн-инсталлятор весит мегабайты. В нем только убрать все (ну или чего-то оставить) и выбрать QtCreator ... ну и все. Не, можно конечно поставить что-то типа Atom'а, Visual Code, NetBeans - но это жЫрные скотины, тогда уж лучше студию. |
Сообщ.
#15
,
|
|
|
Цитата Виталь @ Уберите точку с запятой в конце строки и все у вас получится. static auto var5 = [](const char* var6); |