I'm doing a course but the things the lecturer says works don't
I have recently gotten into programming and decided to learn C++. I took advantage of the sale on Udemy and bought three courses there, one for beginners on C++, one for game-making and one for Blender.
I started doing the course for beginners, the lecturer said that he would use Code::Blocks but that any other IDE would be fine so I downloaded Visual Studio 2017 because that's what the game-making course used. But when I do exactly as the lecturer says (and writes), the code won't compile correctly.
Here is an example:
What the lecturer wrote and got to work on his computer
#include <iostream>
using namespace std;
main()
{
cout << "Hello world! :-)";
}
What I figured out would work after some googling
#include <pch.h>
#include <iostream>
using std::cout;
int main()
{
cout << "Hello world! :-)";
}
And my question to those who are experienced is: What is the difference between Code::Blocks and Visual Studio 2017? What is different in that case? Will I even be able to use this course to learn?
Thanks in advance!
edit: edited in a missing # in the lecturer's code
visual-studio c++
migrated from superuser.com Jan 10 at 15:29
This question came from our site for computer enthusiasts and power users.
|
show 1 more comment
I have recently gotten into programming and decided to learn C++. I took advantage of the sale on Udemy and bought three courses there, one for beginners on C++, one for game-making and one for Blender.
I started doing the course for beginners, the lecturer said that he would use Code::Blocks but that any other IDE would be fine so I downloaded Visual Studio 2017 because that's what the game-making course used. But when I do exactly as the lecturer says (and writes), the code won't compile correctly.
Here is an example:
What the lecturer wrote and got to work on his computer
#include <iostream>
using namespace std;
main()
{
cout << "Hello world! :-)";
}
What I figured out would work after some googling
#include <pch.h>
#include <iostream>
using std::cout;
int main()
{
cout << "Hello world! :-)";
}
And my question to those who are experienced is: What is the difference between Code::Blocks and Visual Studio 2017? What is different in that case? Will I even be able to use this course to learn?
Thanks in advance!
edit: edited in a missing # in the lecturer's code
visual-studio c++
migrated from superuser.com Jan 10 at 15:29
This question came from our site for computer enthusiasts and power users.
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
3
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
3
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
1
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42
|
show 1 more comment
I have recently gotten into programming and decided to learn C++. I took advantage of the sale on Udemy and bought three courses there, one for beginners on C++, one for game-making and one for Blender.
I started doing the course for beginners, the lecturer said that he would use Code::Blocks but that any other IDE would be fine so I downloaded Visual Studio 2017 because that's what the game-making course used. But when I do exactly as the lecturer says (and writes), the code won't compile correctly.
Here is an example:
What the lecturer wrote and got to work on his computer
#include <iostream>
using namespace std;
main()
{
cout << "Hello world! :-)";
}
What I figured out would work after some googling
#include <pch.h>
#include <iostream>
using std::cout;
int main()
{
cout << "Hello world! :-)";
}
And my question to those who are experienced is: What is the difference between Code::Blocks and Visual Studio 2017? What is different in that case? Will I even be able to use this course to learn?
Thanks in advance!
edit: edited in a missing # in the lecturer's code
visual-studio c++
I have recently gotten into programming and decided to learn C++. I took advantage of the sale on Udemy and bought three courses there, one for beginners on C++, one for game-making and one for Blender.
I started doing the course for beginners, the lecturer said that he would use Code::Blocks but that any other IDE would be fine so I downloaded Visual Studio 2017 because that's what the game-making course used. But when I do exactly as the lecturer says (and writes), the code won't compile correctly.
Here is an example:
What the lecturer wrote and got to work on his computer
#include <iostream>
using namespace std;
main()
{
cout << "Hello world! :-)";
}
What I figured out would work after some googling
#include <pch.h>
#include <iostream>
using std::cout;
int main()
{
cout << "Hello world! :-)";
}
And my question to those who are experienced is: What is the difference between Code::Blocks and Visual Studio 2017? What is different in that case? Will I even be able to use this course to learn?
Thanks in advance!
edit: edited in a missing # in the lecturer's code
visual-studio c++
visual-studio c++
edited Jan 11 at 16:29
Wilmer Jonsson
asked Jan 10 at 15:19
Wilmer JonssonWilmer Jonsson
192
192
migrated from superuser.com Jan 10 at 15:29
This question came from our site for computer enthusiasts and power users.
migrated from superuser.com Jan 10 at 15:29
This question came from our site for computer enthusiasts and power users.
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
3
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
3
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
1
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42
|
show 1 more comment
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
3
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
3
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
1
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
3
3
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
3
3
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
1
1
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42
|
show 1 more comment
3 Answers
3
active
oldest
votes
#include <pch.h>
:
See Gabriel's answer.include <iostream>
vs#include <iostream>
:
The former is plain wrong. It has to be#include
with the#
.using namespace std;
vsusing std::cout;
:
While neither is particularly good practice, both should do the same thing here. If you write neither of them, you will have to writestd::cout << ...
instead of onlycout << ...
- that seems annoying but is something you should get used to if you want to eventually be a serious C++ programmer. See also Why is "using namespace std" considered bad practice?.main()
vsint main()
:
This is not something that Code::Blocks should allow because it is not correct C++.main
should always returnint
.
Overall you seem to have hit an unfortunate number of differences between environments/compilers on this basic example already. However, neither your course nor VS2017 is wrong so far, so I recommend you keep using them. If something that your lecturer writes won't work for in a different environment, it's probably a bad idea to write that kind of code in the first place. And they did make several mistakes in this simple example.
PS: I strongly recommend enabling warnings, because they may tell you when you do something wrong in a more subtle way. There are many mistakes (of the "shooting yourself in the foot" kind) that the compiler is not required to stop you from making, but if you ask to be stopped (by heeding warnings) it will help you.
add a comment |
Using Visual Studio should be okay as long as you disable precompiled headers and your tutorial uses standard-compliant code.
About precompiled headers :
Visual Studio enables pre-compiled headers by default in a C++ command line program. This means that in your project, it'll by default force you to use a precompiled header in the first line of your source code (pch.h here).
By disabling them, you can almost* make the first snippet work in VS. To do this, select your project, go to the "Project->Properties" menu, then to the "Configuration Properties -> C/C++ -> Precompiled Headers" section, then change the "Precompiled Header" setting to "Not Using Precompiled Headers" option (this applies to VS 2012, applying this to other versions of VS should be easy).
If you want to avoid this in the future, you can create an empty project when setting up your project in VS.
See also : http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, How to avoid precompiled headers
* : The first snippet won't actually work since the declaration of main is not correct C++, only C (see https://en.cppreference.com/w/cpp/language/main_function, What is the proper declaration of main?)
add a comment |
To your actual question, VS will be fine for your course, although I'm still puzzled by the lecturer's original version of this code.
However, it's really useful to take the time to understand what all your changes did, and why they fixed your problem. Maybe you did this already - that's just not the impression I got from the phrase
What I figured out would work after some googling
- when you get a compile error or warning, read it and try to understand it.
- if you don't understand the error - and this is normal, certainly while you're learning - then hacking on the code until it works is perfectly fine. At least sometimes it's quicker, and the knowledge that you made progress is its own reward.
- if hacking away at the code with the internet at your disposal doesn't get a solution, you'll just have to study the error message more. Turning all compiler errors and warnings on, and trying multiple compilers can both help - even if they all fail, the messages might be more useful. (I often find clang has useful errors, and godbolt.org is super helpful).
if hacking away at the code does get a solution, you should still try and understand why. Now you can see what you changed, look at the original error and try to understand why your changes fixed it. If you made multiple changes, were they all really necessary? Do you understand what they all did, and why?
If you do this, you can fix the next related problem faster, rather than going through the whole trial-and-error process again. You can even write better code that avoids the problem in the first place.
This is the part that actually constitutes learning, which is why I'm making a point of addressing it.
The important fix was changing the lines
include <iostream>
main()
to
#include <iostream>
int main()
because the former aren't legal C++. If your lecturer really wrote exactly that and you didn't somehow mis-copy, then I have no idea why their example worked.
The Visual Studio-specific stuff is the precompiled header, as described in Gabriel's answer.
But the remaining change is essentially cosmetic. Replacing:
using namespace std;
with
using std::cout;
Doesn't affect anything in your code, and just using
std::cout << "Hello world! :-)";
(with no using
at all) would work just as well.
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgotusing std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.
– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the twousing
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.
– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54131940%2fim-doing-a-course-but-the-things-the-lecturer-says-works-dont%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
#include <pch.h>
:
See Gabriel's answer.include <iostream>
vs#include <iostream>
:
The former is plain wrong. It has to be#include
with the#
.using namespace std;
vsusing std::cout;
:
While neither is particularly good practice, both should do the same thing here. If you write neither of them, you will have to writestd::cout << ...
instead of onlycout << ...
- that seems annoying but is something you should get used to if you want to eventually be a serious C++ programmer. See also Why is "using namespace std" considered bad practice?.main()
vsint main()
:
This is not something that Code::Blocks should allow because it is not correct C++.main
should always returnint
.
Overall you seem to have hit an unfortunate number of differences between environments/compilers on this basic example already. However, neither your course nor VS2017 is wrong so far, so I recommend you keep using them. If something that your lecturer writes won't work for in a different environment, it's probably a bad idea to write that kind of code in the first place. And they did make several mistakes in this simple example.
PS: I strongly recommend enabling warnings, because they may tell you when you do something wrong in a more subtle way. There are many mistakes (of the "shooting yourself in the foot" kind) that the compiler is not required to stop you from making, but if you ask to be stopped (by heeding warnings) it will help you.
add a comment |
#include <pch.h>
:
See Gabriel's answer.include <iostream>
vs#include <iostream>
:
The former is plain wrong. It has to be#include
with the#
.using namespace std;
vsusing std::cout;
:
While neither is particularly good practice, both should do the same thing here. If you write neither of them, you will have to writestd::cout << ...
instead of onlycout << ...
- that seems annoying but is something you should get used to if you want to eventually be a serious C++ programmer. See also Why is "using namespace std" considered bad practice?.main()
vsint main()
:
This is not something that Code::Blocks should allow because it is not correct C++.main
should always returnint
.
Overall you seem to have hit an unfortunate number of differences between environments/compilers on this basic example already. However, neither your course nor VS2017 is wrong so far, so I recommend you keep using them. If something that your lecturer writes won't work for in a different environment, it's probably a bad idea to write that kind of code in the first place. And they did make several mistakes in this simple example.
PS: I strongly recommend enabling warnings, because they may tell you when you do something wrong in a more subtle way. There are many mistakes (of the "shooting yourself in the foot" kind) that the compiler is not required to stop you from making, but if you ask to be stopped (by heeding warnings) it will help you.
add a comment |
#include <pch.h>
:
See Gabriel's answer.include <iostream>
vs#include <iostream>
:
The former is plain wrong. It has to be#include
with the#
.using namespace std;
vsusing std::cout;
:
While neither is particularly good practice, both should do the same thing here. If you write neither of them, you will have to writestd::cout << ...
instead of onlycout << ...
- that seems annoying but is something you should get used to if you want to eventually be a serious C++ programmer. See also Why is "using namespace std" considered bad practice?.main()
vsint main()
:
This is not something that Code::Blocks should allow because it is not correct C++.main
should always returnint
.
Overall you seem to have hit an unfortunate number of differences between environments/compilers on this basic example already. However, neither your course nor VS2017 is wrong so far, so I recommend you keep using them. If something that your lecturer writes won't work for in a different environment, it's probably a bad idea to write that kind of code in the first place. And they did make several mistakes in this simple example.
PS: I strongly recommend enabling warnings, because they may tell you when you do something wrong in a more subtle way. There are many mistakes (of the "shooting yourself in the foot" kind) that the compiler is not required to stop you from making, but if you ask to be stopped (by heeding warnings) it will help you.
#include <pch.h>
:
See Gabriel's answer.include <iostream>
vs#include <iostream>
:
The former is plain wrong. It has to be#include
with the#
.using namespace std;
vsusing std::cout;
:
While neither is particularly good practice, both should do the same thing here. If you write neither of them, you will have to writestd::cout << ...
instead of onlycout << ...
- that seems annoying but is something you should get used to if you want to eventually be a serious C++ programmer. See also Why is "using namespace std" considered bad practice?.main()
vsint main()
:
This is not something that Code::Blocks should allow because it is not correct C++.main
should always returnint
.
Overall you seem to have hit an unfortunate number of differences between environments/compilers on this basic example already. However, neither your course nor VS2017 is wrong so far, so I recommend you keep using them. If something that your lecturer writes won't work for in a different environment, it's probably a bad idea to write that kind of code in the first place. And they did make several mistakes in this simple example.
PS: I strongly recommend enabling warnings, because they may tell you when you do something wrong in a more subtle way. There are many mistakes (of the "shooting yourself in the foot" kind) that the compiler is not required to stop you from making, but if you ask to be stopped (by heeding warnings) it will help you.
edited Jan 10 at 15:57
answered Jan 10 at 15:52
Max LanghofMax Langhof
9,9391838
9,9391838
add a comment |
add a comment |
Using Visual Studio should be okay as long as you disable precompiled headers and your tutorial uses standard-compliant code.
About precompiled headers :
Visual Studio enables pre-compiled headers by default in a C++ command line program. This means that in your project, it'll by default force you to use a precompiled header in the first line of your source code (pch.h here).
By disabling them, you can almost* make the first snippet work in VS. To do this, select your project, go to the "Project->Properties" menu, then to the "Configuration Properties -> C/C++ -> Precompiled Headers" section, then change the "Precompiled Header" setting to "Not Using Precompiled Headers" option (this applies to VS 2012, applying this to other versions of VS should be easy).
If you want to avoid this in the future, you can create an empty project when setting up your project in VS.
See also : http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, How to avoid precompiled headers
* : The first snippet won't actually work since the declaration of main is not correct C++, only C (see https://en.cppreference.com/w/cpp/language/main_function, What is the proper declaration of main?)
add a comment |
Using Visual Studio should be okay as long as you disable precompiled headers and your tutorial uses standard-compliant code.
About precompiled headers :
Visual Studio enables pre-compiled headers by default in a C++ command line program. This means that in your project, it'll by default force you to use a precompiled header in the first line of your source code (pch.h here).
By disabling them, you can almost* make the first snippet work in VS. To do this, select your project, go to the "Project->Properties" menu, then to the "Configuration Properties -> C/C++ -> Precompiled Headers" section, then change the "Precompiled Header" setting to "Not Using Precompiled Headers" option (this applies to VS 2012, applying this to other versions of VS should be easy).
If you want to avoid this in the future, you can create an empty project when setting up your project in VS.
See also : http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, How to avoid precompiled headers
* : The first snippet won't actually work since the declaration of main is not correct C++, only C (see https://en.cppreference.com/w/cpp/language/main_function, What is the proper declaration of main?)
add a comment |
Using Visual Studio should be okay as long as you disable precompiled headers and your tutorial uses standard-compliant code.
About precompiled headers :
Visual Studio enables pre-compiled headers by default in a C++ command line program. This means that in your project, it'll by default force you to use a precompiled header in the first line of your source code (pch.h here).
By disabling them, you can almost* make the first snippet work in VS. To do this, select your project, go to the "Project->Properties" menu, then to the "Configuration Properties -> C/C++ -> Precompiled Headers" section, then change the "Precompiled Header" setting to "Not Using Precompiled Headers" option (this applies to VS 2012, applying this to other versions of VS should be easy).
If you want to avoid this in the future, you can create an empty project when setting up your project in VS.
See also : http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, How to avoid precompiled headers
* : The first snippet won't actually work since the declaration of main is not correct C++, only C (see https://en.cppreference.com/w/cpp/language/main_function, What is the proper declaration of main?)
Using Visual Studio should be okay as long as you disable precompiled headers and your tutorial uses standard-compliant code.
About precompiled headers :
Visual Studio enables pre-compiled headers by default in a C++ command line program. This means that in your project, it'll by default force you to use a precompiled header in the first line of your source code (pch.h here).
By disabling them, you can almost* make the first snippet work in VS. To do this, select your project, go to the "Project->Properties" menu, then to the "Configuration Properties -> C/C++ -> Precompiled Headers" section, then change the "Precompiled Header" setting to "Not Using Precompiled Headers" option (this applies to VS 2012, applying this to other versions of VS should be easy).
If you want to avoid this in the future, you can create an empty project when setting up your project in VS.
See also : http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx, How to avoid precompiled headers
* : The first snippet won't actually work since the declaration of main is not correct C++, only C (see https://en.cppreference.com/w/cpp/language/main_function, What is the proper declaration of main?)
edited Jan 10 at 15:45
answered Jan 10 at 15:38
Gabriel RavierGabriel Ravier
133212
133212
add a comment |
add a comment |
To your actual question, VS will be fine for your course, although I'm still puzzled by the lecturer's original version of this code.
However, it's really useful to take the time to understand what all your changes did, and why they fixed your problem. Maybe you did this already - that's just not the impression I got from the phrase
What I figured out would work after some googling
- when you get a compile error or warning, read it and try to understand it.
- if you don't understand the error - and this is normal, certainly while you're learning - then hacking on the code until it works is perfectly fine. At least sometimes it's quicker, and the knowledge that you made progress is its own reward.
- if hacking away at the code with the internet at your disposal doesn't get a solution, you'll just have to study the error message more. Turning all compiler errors and warnings on, and trying multiple compilers can both help - even if they all fail, the messages might be more useful. (I often find clang has useful errors, and godbolt.org is super helpful).
if hacking away at the code does get a solution, you should still try and understand why. Now you can see what you changed, look at the original error and try to understand why your changes fixed it. If you made multiple changes, were they all really necessary? Do you understand what they all did, and why?
If you do this, you can fix the next related problem faster, rather than going through the whole trial-and-error process again. You can even write better code that avoids the problem in the first place.
This is the part that actually constitutes learning, which is why I'm making a point of addressing it.
The important fix was changing the lines
include <iostream>
main()
to
#include <iostream>
int main()
because the former aren't legal C++. If your lecturer really wrote exactly that and you didn't somehow mis-copy, then I have no idea why their example worked.
The Visual Studio-specific stuff is the precompiled header, as described in Gabriel's answer.
But the remaining change is essentially cosmetic. Replacing:
using namespace std;
with
using std::cout;
Doesn't affect anything in your code, and just using
std::cout << "Hello world! :-)";
(with no using
at all) would work just as well.
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgotusing std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.
– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the twousing
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.
– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
add a comment |
To your actual question, VS will be fine for your course, although I'm still puzzled by the lecturer's original version of this code.
However, it's really useful to take the time to understand what all your changes did, and why they fixed your problem. Maybe you did this already - that's just not the impression I got from the phrase
What I figured out would work after some googling
- when you get a compile error or warning, read it and try to understand it.
- if you don't understand the error - and this is normal, certainly while you're learning - then hacking on the code until it works is perfectly fine. At least sometimes it's quicker, and the knowledge that you made progress is its own reward.
- if hacking away at the code with the internet at your disposal doesn't get a solution, you'll just have to study the error message more. Turning all compiler errors and warnings on, and trying multiple compilers can both help - even if they all fail, the messages might be more useful. (I often find clang has useful errors, and godbolt.org is super helpful).
if hacking away at the code does get a solution, you should still try and understand why. Now you can see what you changed, look at the original error and try to understand why your changes fixed it. If you made multiple changes, were they all really necessary? Do you understand what they all did, and why?
If you do this, you can fix the next related problem faster, rather than going through the whole trial-and-error process again. You can even write better code that avoids the problem in the first place.
This is the part that actually constitutes learning, which is why I'm making a point of addressing it.
The important fix was changing the lines
include <iostream>
main()
to
#include <iostream>
int main()
because the former aren't legal C++. If your lecturer really wrote exactly that and you didn't somehow mis-copy, then I have no idea why their example worked.
The Visual Studio-specific stuff is the precompiled header, as described in Gabriel's answer.
But the remaining change is essentially cosmetic. Replacing:
using namespace std;
with
using std::cout;
Doesn't affect anything in your code, and just using
std::cout << "Hello world! :-)";
(with no using
at all) would work just as well.
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgotusing std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.
– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the twousing
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.
– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
add a comment |
To your actual question, VS will be fine for your course, although I'm still puzzled by the lecturer's original version of this code.
However, it's really useful to take the time to understand what all your changes did, and why they fixed your problem. Maybe you did this already - that's just not the impression I got from the phrase
What I figured out would work after some googling
- when you get a compile error or warning, read it and try to understand it.
- if you don't understand the error - and this is normal, certainly while you're learning - then hacking on the code until it works is perfectly fine. At least sometimes it's quicker, and the knowledge that you made progress is its own reward.
- if hacking away at the code with the internet at your disposal doesn't get a solution, you'll just have to study the error message more. Turning all compiler errors and warnings on, and trying multiple compilers can both help - even if they all fail, the messages might be more useful. (I often find clang has useful errors, and godbolt.org is super helpful).
if hacking away at the code does get a solution, you should still try and understand why. Now you can see what you changed, look at the original error and try to understand why your changes fixed it. If you made multiple changes, were they all really necessary? Do you understand what they all did, and why?
If you do this, you can fix the next related problem faster, rather than going through the whole trial-and-error process again. You can even write better code that avoids the problem in the first place.
This is the part that actually constitutes learning, which is why I'm making a point of addressing it.
The important fix was changing the lines
include <iostream>
main()
to
#include <iostream>
int main()
because the former aren't legal C++. If your lecturer really wrote exactly that and you didn't somehow mis-copy, then I have no idea why their example worked.
The Visual Studio-specific stuff is the precompiled header, as described in Gabriel's answer.
But the remaining change is essentially cosmetic. Replacing:
using namespace std;
with
using std::cout;
Doesn't affect anything in your code, and just using
std::cout << "Hello world! :-)";
(with no using
at all) would work just as well.
To your actual question, VS will be fine for your course, although I'm still puzzled by the lecturer's original version of this code.
However, it's really useful to take the time to understand what all your changes did, and why they fixed your problem. Maybe you did this already - that's just not the impression I got from the phrase
What I figured out would work after some googling
- when you get a compile error or warning, read it and try to understand it.
- if you don't understand the error - and this is normal, certainly while you're learning - then hacking on the code until it works is perfectly fine. At least sometimes it's quicker, and the knowledge that you made progress is its own reward.
- if hacking away at the code with the internet at your disposal doesn't get a solution, you'll just have to study the error message more. Turning all compiler errors and warnings on, and trying multiple compilers can both help - even if they all fail, the messages might be more useful. (I often find clang has useful errors, and godbolt.org is super helpful).
if hacking away at the code does get a solution, you should still try and understand why. Now you can see what you changed, look at the original error and try to understand why your changes fixed it. If you made multiple changes, were they all really necessary? Do you understand what they all did, and why?
If you do this, you can fix the next related problem faster, rather than going through the whole trial-and-error process again. You can even write better code that avoids the problem in the first place.
This is the part that actually constitutes learning, which is why I'm making a point of addressing it.
The important fix was changing the lines
include <iostream>
main()
to
#include <iostream>
int main()
because the former aren't legal C++. If your lecturer really wrote exactly that and you didn't somehow mis-copy, then I have no idea why their example worked.
The Visual Studio-specific stuff is the precompiled header, as described in Gabriel's answer.
But the remaining change is essentially cosmetic. Replacing:
using namespace std;
with
using std::cout;
Doesn't affect anything in your code, and just using
std::cout << "Hello world! :-)";
(with no using
at all) would work just as well.
edited Jan 10 at 17:37
answered Jan 10 at 16:00
UselessUseless
43.8k45394
43.8k45394
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgotusing std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.
– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the twousing
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.
– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
add a comment |
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgotusing std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.
– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the twousing
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.
– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (
use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgot using std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.– Max Langhof
Jan 10 at 17:01
It's safe to assume that these were more than "random code permutations". In fact, I'd bet that one of the error messages (
use of undeclared identifier 'cout'
) that was googled at some point led to an answer along the lines of "you forgot using std::cout
". I find the last paragraph unnecessarily patronising, especially given how they already did manage to fix all these errors with no more than one incidental change.– Max Langhof
Jan 10 at 17:01
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The problem if that if you're introducing incidental changes, that means you don't know which changes were important, which means you don't know why they worked or how to avoid the problem in future.
– Useless
Jan 10 at 17:10
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
The key point isn't that you should never hack on something until it works - you can't either learn or sustain your motivation in a vacuum - but that you need to learn to read the error message, and when your code finally works, it's very useful to sit down and understand why.
– Useless
Jan 10 at 17:12
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the two
using
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.– Max Langhof
Jan 10 at 17:18
That's all true, but you are currently inferring that the asker did none of that, simply because they didn't revert that one change. They probably did realize that the two
using
s were equivalent in the process of getting the code to compile (because the change did not change the error message), at which point it's simpler to leave it there than to revert it - and why would you waste the effort if you have 3 other compiler messages left to worry about? I don't think the scolding (that's what it feels like to me as an unrelated third) is appropriate here.– Max Langhof
Jan 10 at 17:18
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
Possibly! I might be reading too much into the phrase what I figured out would work after some googling, but that's how it comes across to me. The question doesn't suggest any particular understanding of what the changes mean, at least. Anyway, it's not meant to scold, but to reinforce the habit of trying to understand.
– Useless
Jan 10 at 17:28
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54131940%2fim-doing-a-course-but-the-things-the-lecturer-says-works-dont%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Your professor wrote C++ code, by using Visual Studio and the syntax, you actually wrote Visual C++ code. You are using an entirely different compiler then your professor. You should configure Visual Studio to use the same C++ compiler, I should point out, Visual Studio supports several different versions of the C++ standard, so it absolutely should work with the first code block. However, questions which ask if you will be able to use this course, are not within our scope. It isn't something anyone can answer at any Stack Exchange community and certainly not here at Super User.
– Security Hound
Jan 10 at 15:27
3
Precompiled headers
– Igor Tandetnik
Jan 10 at 15:31
If you want to write a regular console app in VS2017 use Create New Project -> Visual C++ -> Windows Desktop -> Windows Desktop Wizzard and then make sure is says Console Application in the Application type and uncheck Precompiled Headers and Security Development Lifecycle and do check empty project.
– NathanOliver
Jan 10 at 15:34
3
@FrançoisAndrieux: Declaring a function with no return type has never been valid C++, but it is valid C89.
– You
Jan 10 at 15:36
1
Normally I would use "" for headers in the solution or project and <> for system or external headers so #include <pch.h> would be #include "pch.h". With that said either way will work in VS.
– drescherjm
Jan 10 at 15:42