3

我不明白为什么这不起作用。出于某种原因,我收到了错误:

error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)

如果有帮助,我将在 Visual Studio2010 C++ Express 中执行此操作。不知道为什么它给我这个错误我已经使用其他程序完成了cin......

我的代码:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int main(int argc, char* argv){
    string file;

    if (argc > 1)
    {
        file = argv[1];
    }
    else
    {
        cout << "Please Enter Your Filename: ";
        cin >> file;
    }
}
4

2 回答 2

6

包括<string>

最重要的是,我建议您改用 getline,因为 >> 将在您输入的第一个单词处停止。

例子:

std::cin >> file; // User inputs C:\Users\Andrew Finnell\Documents\MyFile.txt

结果是“C:\Users\Andrew”,考虑到数据直到换行才会被消耗,这是相当意外的,下一次读取的 std::string 将自动被消耗并填充为“Finnell\Documnts\MyFile.txt”

std::getline(std::cin, file); 

这将消耗所有文本,直到换行。

于 2012-04-16T23:23:36.080 回答
1

您忘记了 include <string>,这是定义该函数的地方。请记住,每种类型都将其自己定义operator>>为静态函数,以便通过流进行操作。不可能编写输入流来考虑将来可能创建的所有类型,因此以这种方式进行扩展。

于 2012-04-16T23:21:26.450 回答