Переход от Dev-C++ к VC++

Да нубский вопрос...

До сих пор я использовал Dev-C++ для всех своих проектов, но он невероятно устарел, и поэтому библиотеки. Поэтому я открыл свою копию Visual C++ и скопировал код. Когда я компилирую, выскакивает миллион ошибок, как будто каждая вторая строчка моего кода — дерьмо. Я бы не хотел снова начинать проект с нуля.

Вопрос: Почему Dev-C++ и VC++ компилируются по-разному??? Я слышал, что они используют разные компиляторы, но это все еще C++. Первой ошибкой, на которую я обратил внимание, было недопустимое сравнение между const char* и std::string.

В любом случае, есть ли способ сделать VC++ менее строгим к программированию, как Dev-C++. Или есть несколько существенных различий между компиляторами Dec-C++ и VC++, о которых мне следует знать.

Большинство ошибок, похоже, связаны с std::string или LPCWSTR (я могу исправить это сам).

Извините за эту очень широкую и бесполезную тему, я знал.

-Алекс


person Alexander Rafferty    schedule 24.08.2010    source источник
comment
Вы пытались создать проект из существующего кода?   -  person DumbCoder    schedule 24.08.2010
comment
Обратите внимание, что компиляторы известны тем, что выдают миллион ошибок за одну ошибку. Например. ошибетесь в объявлении переменной, и вы получите ошибку не только там, но и при каждой последующей попытке использовать эту переменную (поскольку она не объявлена).   -  person MSalters    schedule 24.08.2010


Ответы (4)


Это не ответит на все, но может помочь.

По умолчанию VC++ использует unicode, а MinGW (на котором, как мне кажется, основан DevCpp) использует ansi.

Это может объяснить ваши проблемы со строками: вы в основном передаете строки char*, тогда как для большинства функций требуется что-то вроде wchar*.

Я предлагаю либо исправить код, чтобы он стал совместимым с юникодом, либо отменить определение макроса UNICODE в проекте VC++, если юникод не требуется.

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

Не могли бы вы дать нам несколько примеров того, что происходит ужасно неправильно? Возможно, мы сможем помочь точнее.

person ereOn    schedule 24.08.2010
comment
просматривая ошибки, кажется, что все они привязаны либо к std::strings, либо к LPWSTR. Эх... Я могу сделать его совместимым с юникодом, но очевидная путаница со std::string вызывает беспокойство. Он жаловался на то, что я присвоил одну std:string другой! например ошибка C2678: двоичный файл '==': не найден оператор, который принимает левый операнд типа 'std::string' (или нет приемлемого преобразования) - person Alexander Rafferty; 25.08.2010
comment
Большой! После замены ‹string.h› на ‹string› все строковые ошибки исчезли. Остальные связаны с юникодом, их нужно решить, заменив char* на wchar* и hi на Lhi. Вещи ищут. - person Alexander Rafferty; 25.08.2010
comment
После смены кодировки с юникода на неустановленную все ошибки исчезли, и у меня осталось всего около 20 мелких исправлений, которые мне нужно было решить. Спасибо, ребята, за помощь! - person Alexander Rafferty; 25.08.2010
comment
@Alexander: Действительно, <string> - правильный путь. Обратите внимание, что вы также можете использовать std::wstring вместо std::string, если вы действительно хотите сделать свой код совместимым с юникодом. Рад, что вы смогли решить свои проблемы. - person ereOn; 25.08.2010

Во-первых, несколько замечаний, потому что многие пользователи Dev-C++ запутались (раньше я был)

Dev-C++ не компилятор. Компилятором является GCC (точнее, модифицированная версия GCC для работы в Windows: MinGW). Dev-C++ — это IDE: текстовый редактор с дополнительной кнопкой, которая при нажатии вызывает MinGW с соответствующими параметрами.

Больше ничего.

То же самое для Visual Studio: Visual Studio — это IDE, которая вызывает визуальный компилятор (vc.exe), который реализует VC++, который является реализацией Microsoft стандарта C++.

Во-вторых: это не нубский вопрос. Вы обнаружили проблемы с переносимостью, что является большой проблемой для C и C++. Многие вопросы по StackOverflow возникают из-за проблем с переносимостью (код, который работает в Windows, но не в Linux и т. д.).

Общее эмпирическое правило состоит в том, чтобы 1) установить максимальный уровень предупреждения вашего компилятора и 2) разрабатывать параллельно на всех платформах, на которые вы ориентируетесь.

Надеюсь это поможет.

person Calvin1602    schedule 24.08.2010

Настройки проекта одинаковые? Возможно, вам нужно связать дополнительные .libs или добавить аналогичные директивы препроцессора, как в Dev-C++. Если вы просто скопируете и вставите код в проект, вы фактически переустановите все настройки проекта по умолчанию, что для многих проектов нарушит сборку.

Кроме того, попробуйте добавить одну из наиболее распространенных ошибок, которые вы получаете, к вопросу со строкой кода, и, возможно, мы сможем прокомментировать.

person AshleysBrain    schedule 24.08.2010

Dev-cpp использует mingw в качестве компилятора. Возможно, вам повезет больше, используя обновленную версию mingw через другую IDE. Это поможет с внешними зависимостями (mingw использует gcc, который использует файлы *.a для ссылки, VC++ использует файлы *.lib).

Когда вы упоминаете строку и LPCWSTR, см. ответ ereOn. Убедитесь, что у вас правильно определены UNICODE и _UNICODE (в флагах сборки как -DUNICODE или в параметрах проекта VC++).

person rubenvb    schedule 24.08.2010