为C++获得正确的编译器

num*_*l25 9 c++ visual-c++

我正在尝试学习c ++,但我阅读或查找过的大部分教程和书籍都教会你这个......

(我假设像大多数教程一样,他们在开始时教授在win32控制台或CLR控制台中编码.在任何一种情况下,以下都不起作用.)

#include <iostream>
int main(  )
{
    std::cout << "Hello World\n";
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

我拥有的IDE是Visual C++ 2008 Express版,它们接受这样的代码

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者像这样

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

老实说,我没有这些没有区别,我不确定我是否应该只下载一个旧的编译器,以便它的工作原理.如果有人能告诉我这些是什么区别,从那里去哪里.这将有很大帮助.谢谢[编辑]

我想做一个简单的你好世界.但我得到错误"系统无法找到指定的路径".我有截图显示错误的样子.它也说我的项目已经过时,因为我在构建它之前清楚地保存了文件.显然它找不到可执行文件.我去调试折叠,没有看到任何.exe文件.

截图

截图

将帖子

好的,现在当我尝试构建项目时,我收到以下错误

1>------ Rebuild All started: Project: test, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'test', configuration 'Debug|Win32'
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>test.cpp
1>c:\users\numerical25\desktop\test\test\test.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use
1>        Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\numerical25\desktop\test\test\test.cpp(6) : error C2653: 'std' : is not a class or namespace name
1>c:\users\numerical25\desktop\test\test\test.cpp(6) : error C2065: 'cout' : undeclared identifier
1>Build log was saved at "file://c:\Users\numerical25\Desktop\test\test\Debug\BuildLog.htm"
1>test - 2 error(s), 1 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码

#include <iostream>
#include "stdafx.h"

int main(  )
{
    std::cout << "Hello World\n";
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

注意:我尝试使用#include"stdafx.h"时使用它.当我在没有#include"stdafx.h"的情况下尝试使用它时,它说我可能会错过它.

小智 19

不确定你在问什么.您提供的前两个示例是应该(将)使用VC++编译的有效C++程序.第三个示例是必须使用/ CLR编译器开关编译的C++/CLI程序(这称为托管C++).

编辑:添加更具体的信息(来自下面的评论):

前两个示例是标准(本机)C++(尽管第二个示例具有MS专有宏).他们编译为本机代码.第三个是C++/CLI(C++的"托管"扩展).它编译为托管(.NET)代码.只有第三个代码段以任何方式与.NET框架交互.所有这三个都是完全可构建的,并且可以使用VS 2008中的相应项目运行(无需命令行)!

根据您的最新更新,您可能已经修改了一些项目属性并更改了一些路径.该应用程序正在构建,但是当您尝试通过VS运行它时(<Ctrl>+F5顺便说一句,您应该这样做),找不到可执行文件(有几种方法可以通过更改或播放各种设置来搞砸这个) .

请注意建筑和运行之间的区别.构建是编译和链接源代码的过程.正在运行正在启动生成的可执行文件 你似乎在这些之间感到困惑(根据你对"......过时"对话框的抱怨来判断).如果在对项目进行更改后尝试在不重建的情况下运行(即使保存了更改),则获取"...过时"对话框是正常的.只需确保单击"是".您需要先构建项目,然后才能运行它.

我的建议是完全删除你的项目和解决方案.创建一个新的空项目,正如这个现在非常重量级的线程中的其他地方所建议的那样,并且不要修改任何项目设置.如果这不起作用,那就严重错了!

另一个编辑: 刚刚完成,因为这个问题不断变化:

正如其他人已经指出的那样,第一个片段的最终问题是使用预编译头文件(PCH).默认情况下,在新的VS C++项目中打开PCH.它们的目的是在许多实现文件包含同一组头时加快编译速度 - 防止编译器必须解析每个编译单元的头文件.

你有三个选择:

  1. (推荐)禁用PCH - 项目属性 - >配置属性 - > C/C++ - >预编译标题:将创建/使用预编译标题设置不使用预编译标题.(您不需要对"stdafx.h"文件或#includefor 文件执行任何操作.)
  2. 将常用的#includes放在"stdafx.h"中.在你的情况下,你会#include <iostream>输入"stdafx.h".
  3. 把你的#include小号 `#包括"stdafx.h中".Microsoft要求"stdafx.h"是编译单元中的第一个包含文件.

  • 哇!答案实际上是正确的!这个问题似乎很少见. (2认同)

Pet*_*ter 7

一个小问题,我在答案的其他地方没有看到:当使用预编译头文件时,例如你的stdafx.h,你需要先包含它们.将其更改为:

#include "stdafx.h"
#include <iostream>
Run Code Online (Sandbox Code Playgroud)

这应该修复它的错误.

或者,简单地关闭预编译头可能更容易:项目>属性>配置属性> C/C++>预编译头>将第一个选项切换为"不使用预编译头".它们对于大型项目非常有用,但在学习时会很尴尬和烦人,因为它们有额外的规则(比如"必须首先包含"),这些规则不是标准C++的要求.