C++ Cin没有操作数>&燃气轮机;

C++ Cin没有操作数>&燃气轮机;,c++,iostream,cin,C++,Iostream,Cin,我不明白这为什么不起作用。出于某种原因,我得到了错误: 错误C2678:二进制'>>':未找到接受'std::istream'类型的左侧操作数的运算符(或没有可接受的转换) 我在VisualStudio2010 C++快车中做这件事,如果这样有帮助的话。不知道为什么它会给我这个错误,我已经用cin完成了其他程序 我的代码: #include <iostream> #include <iomanip> #include <fstream> using names

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

错误C2678:二进制'>>':未找到接受'std::istream'类型的左侧操作数的运算符(或没有可接受的转换)

我在VisualStudio2010 C++快车中做这件事,如果这样有帮助的话。不知道为什么它会给我这个错误,我已经用
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;
    }
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv){
字符串文件;
如果(argc>1)
{
file=argv[1];
}
其他的
{
cout>文件;
}
}

您忘了包含
,该函数就是在这里定义的。请记住,每个类型都将自己的
操作符>>
定义为一个静态函数,用于通过流进行操作。输入流不可能写入到将来可能创建的所有类型的帐户中,因此它以这种方式扩展。

包括

除此之外,我建议您使用getline,因为>>将在输入的第一个单词处停止

例如:

std::cin >> file; // User inputs C:\Users\Andrew Finnell\Documents\MyFile.txt
结果是“C:\Users\Andrew”,考虑到数据直到换行时才被使用,因此非常意外,下一次读取的std::string将被自动使用并填充为“Finnell\Documnts\MyFile.txt”


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

#include
你所说的“>>与std::string的不兼容”是什么意思?@Benjamin:如果用户键入一个包含空格的文件名,那么
operator>
@ildjarn:显然,事情不会像预期的那样进行。这正是
操作符>>
指定要执行的操作。做指定的事情并不是我所说的“工作不好”。@Benjamin:当然;虽然Andrew的观点在上下文中是有效的,但我同意它的措辞不好。我的措辞可能更好,但std::cin>>文件只使用输入的第一个“字”并不明显或直观,特别是考虑到在用户创建换行之前不会处理std::cin>>文件。
std::getline(std::cin, file);