visual studio 2012 c++ hello world - iostream 不工作
Posted
技术标签:
【中文标题】visual studio 2012 c++ hello world - iostream 不工作【英文标题】:visual studio 2012 c++ hello world - iostream not working 【发布时间】:2012-09-27 05:39:30 【问题描述】:我对 Visual Studio 的 2012 版有疑问。我还在使用“Sams Teach Yourself C++ in One Hour a day, 7th edition”。
在使用 google 找到 C++ 的“最佳”编译器后,Visual Studios 似乎是首选工具。
所以我下载并安装了 Visual Studios 2012。本书的第一课是(并告诉我通过转到 File > New > Project >Visual C++ > Win32 > Console Application 将其作为控制台应用程序运行 )
#include <iostream>
int main()
std::cout << “Hello World!” << std::endl;
return 0;
这根本不起作用。它会输出类似于以下内容的错误消息:
1>c:\users\nik\documents\visual studio 2012\projects\consoleapplication4\consoleapplication4\consoleapplication4.cpp(8): 错误 C2065:“你好”:未声明的标识符 1> 生成代码... ========== 构建:0 成功,1 失败,0 最新,0 跳过 =========="
(与第一行类似的行较多,但比较长)
但是,在 youtube 上搜索并观看视频后,以下代码可以工作(使用 File > New > Project >Visual C++ > General > Empty Project)
#include <iostream>
#include "conio.h"
using namespace std;
int main()
cout << "Hello Nik" << endl;
_getch();
return 0;
Visual Studio 2012 有 C++ 编译器吗?还是它只有一个可视化 c++ 编译器(如果这甚至是问题,我认为可能的唯一原因是我可以看到 Visual C++ 的模板,但没有看到 c++ 本身的模板......)还是我需要下载 Visual Studio Express下载原生 c++ ??
任何帮助将不胜感激,因为我在这里感觉有些超出我的深度......
谢谢。
【问题讨论】:
撇号错误? “”而不是“” Visual Studio 不是编译器,它只是任何编译器的“大文本编辑器”。 为了发布这个问题,我复制了书中写的代码,所以我认为这就是为什么撇号不同的原因。无论如何都尝试了,但仍然出现失败的错误。 @Kamil - 甚至免费的“express”版本也包含编译器和更多工具。 “Visual Studio”是整个包的名称。 我刚刚指出,Visual Studio 不是编译器(抱歉英语不好)。 【参考方案1】:除了撇号您可能需要在项目属性中禁用预编译头。
它们在 VS2012 中默认开启。如果您不熟悉预编译头文件,请关闭它们。
-
右键单击项目(不是解决方案)
点击属性。
展开“配置属性”
展开“C/C++”
选择“预编译头文件”
将“预编译头”设置为“不使用预编译头”
More information about precompiled headers and stdafx.h file at Wikipedia
【讨论】:
我找不到您描述的预配置标题。但是我开始了一个新项目并取消选中预编译头文件的复选框,它工作正常!非常感谢 我跳过了“列表”上的“点击属性”。我现在修正了我的答案。 有趣的是,我已经预编译了头文件,并且仍然能够重现与问题中相同的错误(假设撇号错误。)这里肯定发生了其他事情。我不相信预编译的头文件是罪魁祸首。 Alex R. 如果您打开了预编译头文件 - 当您使用预编译头文件时,编译器会跳过未预编译的“iostream”并寻找 stdafx.h。【参考方案2】:你用的撇号是错误的:
“Hello World!”
应该是
"Hello World!"
请注意 SO 是如何识别差异的。您至少应该键入您在书中看到的代码,而不是复制和粘贴它。 ;-)
【讨论】:
我做到了。出于这个问题的目的,我只是复制粘贴书中写的内容,因为我在页面上有其他代码。 那么为什么要复制书中的那个,而不是你正在在你的应用中实际使用的那个呢?我在我的 IDE 中尝试了您的实际代码——瞧,我得到了相同的未声明标识符错误。因此,只需尝试更改撇号就可以了。 我可能应该控制 -z 以返回我的原始代码,而不是从书中复制粘贴,但是,我最初确实使用了正确的撇号。不过感谢您的回答。哦,反对票不是来自我。再次感谢 @Nik 你可以随时复制你的实际代码——减去不相关的部分——并相应地更新你的问题。【参考方案3】:Win32 控制台应用程序实际上与空项目有很大不同。 Win32 使用一个消息(输入)队列,您在循环中轮询该队列,您的程序分别使用 Win32 API 并执行某些操作。
除非你让它依赖于它,否则空项目对 Win32 或 Windows 在 API 方面提供的任何东西的依赖程度较低。这将是你空项目中的 simples hello world 应用程序:
#include <iostream>
using namespace std;
int main()
cout << "Hello World" << endl;
return 0;
【讨论】:
【参考方案4】:试试这个::
“Hello World!” 而不是 “Hello World!”。
【讨论】:
谁在否决我们的答案?不管是谁,请解释一下,这样做是正确的。 @AlexR.- 你为什么问我?我是那个答案被否决的人。请解释一下好吗? 不,事实上我支持你。我不是在问你。我猜,无论谁对你的答案投了反对票,我也对我投了反对票。但他/她懒得解释原因,这是不负责任的。 +1 。我们指出了代码中非常明显的错误。【参考方案5】:两者的区别
“Hello World!” and
"Hello Nik" is the apostrophe.
Aslo 是错误仍然存在,而不仅仅是检查 Visual C++ 库链接器。
也绝对不需要conio.h
如果您要从书中复制,至少要正确复制。
Using namespace std;
would be pretty smart in this case.
【讨论】:
【参考方案6】:为了修复你的错误,你必须删除 std:: 的 std::cout 和 std::endl,并使用命名空间 std;在#include iostream 下方,并将“ ”更改为“ ”。
#include <iostream>
using namespace std;
int main()
cout <<"Hello World" << endl;
return 0;
在 Visual Studio 2012 中
file>new projet>visual c++ (Project win32)>application settings(application console+Not Using Precompiled)>in right box in you Project (right click, add>new element>file c++).
【讨论】:
你做了哪些改变?你有没有解释什么?无益的回答 =(以上是关于visual studio 2012 c++ hello world - iostream 不工作的主要内容,如果未能解决你的问题,请参考以下文章
MS Visual Studio 2012 Express 是不是同时包含 C#、Visual Basic、C++? [关闭]
Visual Studio 2010 的 Visual C++ 2012 运行时库先决条件
使用 Visual Studio 2012 Profiler 分析 C++
使用 Visual Studio 2012 开始使用 awesomium c++