适用于 g++,但不适用于 MSVC++

Works with g++ but not MSVC++

本文关键字:适用于 MSVC++ 不适用 g++      更新时间:2023-10-16

可能的重复项:
为什么 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;)。