适用于 g++,但不适用于 MSVC++
Works with g++ but not MSVC++
可能的重复项:
为什么 cin>>字符串不能与 Visual C++ 2010 一起使用?
我编写的第一个程序拒绝用Visual C++编译,看起来它抱怨没有为istream定义">>"运算符。
仔细查看后,它似乎是正确的,所以我用 g++ 检查了它,它编译得很好(并且没有 -Wall 的警告)。
那么为什么它适用于 g++ 而不是 Visual C++呢?
这是程序:
#include <iostream>
#include <list>
int main() {
std::list<std::string> list;
std::string str = "";
std::cin >> str;
while (str.compare("q") != 0) {
list.push_back(str);
std::cin >> str;
}
std::cout << "You entered: n";
for (std::list<std::string>::iterator i = list.begin(); i != list.end(); i++) {
std::cout << *i << std::endl;
}
return 0;
}
我原以为C++为Visual C++编写的代码和为g++编写C++代码在大多数情况下几乎相同。
它们有多大不同,你说这类问题出现的频率有多高,你知道我能在任何地方找到这些差异/陷阱吗?
不同的编译器具有不同的标头,这些标头在内部包含其他标头。 gcc 可能包含 <string>
在 <iostream>
中,而 Visual Studio 的<iostream>
不包括 <string>
。尝试推杆:
#include <string>
在顶部与您的其他包含。 <string>
是定义operator>>(std::istream, std::string)
的头文件(换句话说,<string>
是"正式"提供您需要执行的功能的标头std::cin >> str;
)。
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- __attribute__(优化(0))) 是否适用于"recursively"?
- 为什么 std::erase(std::erase_if) 不是适用于<algorithm>任何容器的模板?
- 使用一个参数的模板函数时出错(适用于 2)
- 使用 适用于 Android 和 iOS 的 tf-lite C++ API
- 为什么这适用于 G++ 而不是 CLANG?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 适用于 Linux 的 c++ 上的代理脚本
- 为什么我的 SFINAE 表达式不再适用于 GCC 8.2?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 模板函数仅适用于VS
- Visual C++ 模板代码适用于 MSVC 2015,但不适用于 2017
- 宏调用中的 #ifdef 适用于 GCC,但不适用于 MSVC
- 用于提升program_options的自定义验证器不适用于 GCC,适用于 MSVC
- 适用于 g++,但不适用于 MSVC++