1

可能重复:
为什么 cin >> string 不能与 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;
}

我曾认为为 Visual C++ 编写的 C++ 代码和为 g++ 编写的 C++ 代码在大多数情况下几乎相同。

它们有多大不同,你说这些问题多久出现一次,你知道我在哪里可以找到这些差异/陷阱吗?

4

1 回答 1

3

不同的编译器具有不同的头文件,这些头文件在内部包含其他头文件。gcc 可能包括<string>inside <iostream>,而 Visual Studio<iostream>不包括<string>. 尝试放置:

#include <string>

在顶部与您的其他包括。<string>是定义的头文件operator>>(std::istream, std::string)(换句话说,<string>是“正式”提供您需要做的功能的头文件std::cin >> str;)。

于 2013-01-27T04:02:37.983 回答