Visual Studio 2017 Community中stdafx.h引发iostream相关编译问题求助
解决VS2017 Community编译C++时的C1010及头文件识别问题
兄弟,这坑我刚上手VS的时候也踩过!本质就是VS默认开启的**预编译头(Precompiled Header)**机制在搞事情,和在线编译器的默认配置不一样,才导致你出现矛盾的错误。下面给你两种解决思路,选哪个都行:
方案一:直接关掉预编译头(最简单,适合小项目)
VS新建C++项目时默认会开启预编译头,要求所有代码的第一行必须是#include "stdafx.h",否则就会弹C1010错误。但如果你不想用这个机制,直接关掉就行:
- 右键你的项目 → 选择「属性」
- 依次展开「配置属性」→「C/C++」→「预编译头」
- 把「预编译头」选项改成「不使用预编译头」
- 点击「确定」后,你的原始代码就能直接编译运行,和在线编译器的效果完全一致。
方案二:正确使用预编译头(适合大项目优化编译速度)
如果你想保留预编译头的优化(小项目其实没必要),就得按VS的规则来:
- 确保
stdafx.h是代码里第一个被包含的头文件:预编译头开启后,编译器会忽略stdafx.h之前的所有代码,所以你之前直接加#include "stdafx.h"但放在#include <iostream>后面,等于iostream根本没被正确包含,自然会报string、cout未识别的错误。 - 把通用头文件放到
stdafx.h里:预编译头的作用就是把常用头文件提前编译好,减少重复编译时间。
修改后的示例代码:
第一步:编辑stdafx.h
#pragma once // 把你需要的通用头文件都放这里 #include <iostream> #include <string> using namespace std;
第二步:修改你的主cpp文件
#include "stdafx.h" // 必须是第一行! int main() { string var1; std::string pass; std::cout << "Enter Any word" << std::endl; std::cin >> pass; cout << "1.what is 9 x 9" << endl; std::cin >> var1; // ... 后面的代码保持不变 }
为什么在线编译器没问题?
在线编译器默认都是按标准C++规则编译,不会启用预编译头这种VS特有的机制,所以你的原始代码完全符合标准,自然能正常运行。
内容的提问来源于stack exchange,提问作者Shipof123
相关产品推荐
相关产品推荐

