2010-08-24 2 views
2

Да, это нуб вопрос ...Переход от Dev-C++ в VC++

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

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

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

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

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

-Alex

+0

Вы пытались создать проект из существующего кода? – DumbCoder

+0

Обратите внимание, что компиляторы известны тем, что выбрасывают миллион ошибок за одну ошибку. Например. совершите ошибку в объявлении переменной, и вы не только получите там ошибку, но и одну для каждой последующей попытки использовать эту переменную (поскольку она не объявлена). – MSalters

ответ

1

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

По умолчанию VC++ использует Юникода в то время как MinGW (на котором DevCpp основан я верю) использует AnSi.

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

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

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

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

+0

skimming через ошибки, кажется, что они все связаны либо с std :: strings, либо с LPWSTR. Вздох .... Я могу сделать его совместимым с юникодом, но кажущаяся путаница std :: string вызывает беспокойство. Он жаловался на то, что я назначил одну строку std: другому! , например. ошибка C2678: двоичный '==': оператор не найден, который берет левый операнд типа 'std :: string' (или нет приемлемого преобразования) –

+0

Отлично! После изменения до все ошибки строки исчезли. Остальные связаны с юникодом, должны быть решены путем изменения char * на wchar * и «hi» на L «hi». Вещи смотрят вверх. –

+0

После смены кодировки с unicode на unset все ошибки исчезли, и у меня осталось всего около 20 небольших исправлений, которые мне нужно было решить. Спасибо, ребята, за помощь! –

0

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

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

0

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

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

4

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

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

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

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

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

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

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

Смежные вопросы