Я делаю курс, но то, что говорит преподаватель, не работает - PullRequest
0 голосов
/ 10 января 2019

Я недавно увлекся программированием и решил изучать C ++. Я воспользовался продажей на Udemy и купил там три курса, один для начинающих на C ++, один для создания игр и один для Blender.

Я начал делать курс для начинающих, лектор сказал, что он будет использовать Code :: Blocks, но что любая другая IDE будет в порядке, поэтому я скачал Visual Studio 2017, потому что это то, что использовал курс по созданию игр. Но когда я делаю именно так, как говорит (и пишет) лектор, код не будет правильно скомпилирован.

Вот пример:

Что лектор написал и принялся за работу на своем компьютере

#include <iostream> 

using namespace std;

main()
{
    cout << "Hello world! :-)";

}

То, что я понял, сработает после некоторого поиска в Google

#include <pch.h>
#include <iostream>
using std::cout;

int main()
{
    cout << "Hello world! :-)";
}

И мой вопрос к тем, кто имеет опыт: в чем разница между Code :: Blocks и Visual Studio 2017? Что отличается в этом случае? Смогу ли я даже использовать этот курс для изучения?

Заранее спасибо!

edit: отредактировано в пропущенном # в коде лектора

Ответы [ 3 ]

0 голосов
/ 10 января 2019
  • #include <pch.h> * * 1004 См. Ответ Габриэля.

  • include <iostream> против #include <iostream>:
    Первое совершенно неправильно. Это должно быть #include с #.

  • using namespace std; против using std::cout;:
    Хотя ни одна из них не является особенно хорошей практикой, оба должны делать то же самое здесь. Если вы не пишете ни один из них, вам придется написать std::cout << ... вместо только cout << ... - это кажется раздражающим, но к этому следует привыкнуть, если вы хотите стать серьезным программистом C ++. См. Также Почему «использование пространства имен std» считается плохой практикой? .

  • main() против int main():
    Это не то, что Code :: Blocks должно позволять, потому что это не правильно C ++. main всегда должен возвращать int.

В целом вы, кажется, уже столкнулись с прискорбным количеством различий между средами / компиляторами в этом базовом примере. Однако ни ваш курс, ни VS2017 пока не верны, поэтому я рекомендую вам продолжать их использовать. Если что-то, что пишет ваш лектор, не будет работать в другой среде, то, пожалуй, плохая идея - писать такой код. И они сделали несколько ошибок в этом простом примере.

PS: я настоятельно рекомендую включить предупреждения, потому что они могут сказать вам, когда вы делаете что-то не так более тонким способом. Существует много ошибок (типа «стреляй себе в ногу»), что компилятору не требуется , чтобы помешать вам сделать, но если вы попросите, чтобы вас остановили (прислушиваясь к предупреждениям), это поможет вам .

0 голосов
/ 10 января 2019

К вашему актуальному вопросу, VS подойдет для вашего курса, хотя я все еще озадачен оригинальной версией лектора этого кода.

Однако действительно полезно потратить время на то, чтобы понять, что сделали все ваши изменения и почему они решили вашу проблему. Может быть, вы уже сделали это - это не то впечатление, которое я получил от фразы

То, что я понял, сработает после некоторого поиска в Google

  • когда вы получаете сообщение об ошибке компиляции или предупреждение, прочитайте его и попытайтесь понять это.
  • если вы не понимаете ошибку - и это нормально, конечно, пока вы учитесь - тогда взломать код, пока он не заработает, вполне нормально. По крайней мере, иногда это происходит быстрее, и знание того, что вы достигли прогресса, является собственной наградой.
  • если взлом кода с помощью Интернета в вашем распоряжении не решит проблему, вам просто нужно больше изучить сообщение об ошибке. Включение всех ошибок и предупреждений компилятора и попытка использования нескольких компиляторов могут оба помочь - даже если все они терпят неудачу, сообщения могут быть более полезными. (Я часто нахожу, что в clang есть полезные ошибки, и godbolt.org очень полезен).
  • если взломать код действительно найдет решение, вы все равно должны попытаться понять, почему . Теперь вы можете увидеть, что вы изменили, посмотреть на исходную ошибку и попытаться понять, почему ваши изменения исправили ее. Если вы сделали несколько изменений, все ли они были действительно необходимы? Ты понимаешь, что они все сделали и почему?

    Если вы сделаете это, вы сможете исправить следующую связанную проблему * на 1027 * быстрее , вместо того, чтобы снова проходить весь процесс проб и ошибок. Вы даже можете написать лучший код, который позволит избежать проблемы в первую очередь.

    Это та часть, которая на самом деле составляет обучение, поэтому я обращаю внимание на это.


Важным исправлением было изменение линий

include <iostream>

main()

до

#include <iostream>

int main()

потому что первые не являются легальными C ++. Если ваш лектор действительно написал именно это, а вы как-то не ошиблись, то я понятия не имею, почему их пример сработал.

Специфичные для Visual Studio вещи - это предварительно скомпилированный заголовок, как описано в ответе Габриэля.

Но оставшиеся изменения по сути косметические. Замена:

using namespace std;

с

using std::cout;

Ничего не влияет на ваш код, и только использование

  std::cout << "Hello world! :-)";

(без using вообще) будет работать так же хорошо.

0 голосов
/ 10 января 2019

Использование Visual Studio должно быть нормальным, если вы отключите предварительно скомпилированные заголовки, а в вашем руководстве используется стандартный код.

О предварительно скомпилированных заголовках:

Visual Studio по умолчанию включает предварительно скомпилированные заголовки в программе командной строки C ++. Это означает, что в вашем проекте он по умолчанию заставит вас использовать предварительно скомпилированный заголовок в первой строке исходного кода (здесь pch.h). Отключив их, вы можете почти * заставить первый фрагмент работать в VS. Для этого выберите свой проект, перейдите в меню «Проект-> Свойства», затем в раздел «Свойства конфигурации -> C / C ++ -> Предварительно скомпилированные заголовки», затем измените параметр «Предварительно скомпилированный заголовок» на «Не использовать предварительно скомпилированный» «Заголовки» (это относится к VS 2012, применять его к другим версиям VS должно быть легко).

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

См. Также: http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, Как избежать предварительно скомпилированных заголовков

*: Первый фрагмент не будет работать, поскольку объявление main не является правильным C ++, только C (см. https://en.cppreference.com/w/cpp/language/main_function, Что такое правильное объявление main? )

...