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++

visual studio 2012 c++ hello world - iostream 不工作

在 Visual Studio 2012 Express 中设置 C++ 调试环境