提问者:小点点

未在作用域中声明的结构的实例。 然后就成了?


我来自Perl和Python,是一个完全的C++初学者,所以请宽容我。 我有这一点代码,过去可以工作,但稍加修改就不再工作了。 把我难倒了。 抱歉,没有更小的例子,但我无法在更小的规模上复制它(如果我可以的话,我可能知道问题出在哪里……)

我试图从结构cPlane创建一个实例向量。

void fFileReadin (vector<cPlane>& vPlanes, string sInputFile) {
    ifstream f;
    string s;
    vector<cPlane> vPPP;
    f.open(sInputFile.c_str(), ios::in);
    if ( f.good() ) {
        cout << "file found!!";
        do
        {
             getline(f,s);
             if ( s.size() > 0 ) {
                cout << "Stringy:" << s << endl;
                vector<string> vAtLine = psplit(s);
                cout << "Whole string:" << s << endl;
                cout << "Element 2:" << vAtLine[1] << endl;
                cPlane FluFlu;
                FluFlu.name = vAtLine[0];
                FluFlu.maker = vAtLine[1];
                FluFlu.engines = stoi(vAtLine[2]);
                FluFlu.pax = stoi(vAtLine[3]);
                FluFlu.consume = stoi(vAtLine[4]);
                cout << "Pax:" << FluFlu.pax << endl;
                vPlanes.push_back(FluFLu);           // <-- This is line 39
                vPPP.push_back(FluFlu);

             }
        }
        while (!f.eof() ) ;
        f.close();
    }
}

它读取一个文本文件,解析每一行,在逗号上拆分并提取内容以将它们分配给结构,在一个向量中列出结构,在main.cpp中再次访问该向量。 大部分都很好用。 但是如果我运行这个,当它应该将实例FluFlu推入向量vPlanes时,编译器抛出

错误:未在此作用域中声明“FluFLu”。。。。vplanes.push_back(FluFLu);^~~~~~~FileRead.cpp:39:35:

注:建议的替代方案:“Fluflu”

如果我对这行进行注释,它可以正常工作。 所以当这一行存在时,FluFlu不在这个范围内定义,但是当我移除这一行时,在下一行中找到FluFlu并将其推入另一个载体是没有问题的。 所以我想可能是引用的问题,但是下面的代码:

void fFileReadin (vector<cPlane>& vPlanes, string sInputFile) {
    cPlane AceofSpades;
    AceofSpades.engines=11;
    AceofSpades.maker="A";
    AceofSpades.pax=112;
    vPlanes.push_back(AceofSpades);
    AceofSpades.engines=5;
    AceofSpades.maker="TTT";
    AceofSpades.pax=33;
    vPlanes.push_back(AceofSpades);
}

工作也很好。。。 我看不出这里的范围有什么不同。。。 如有任何帮助,我们将不胜感激。


共1个答案

匿名用户

编译器正告诉你这里的错误所在,你有错失键入的第39行,fluflflufl是不同的东西,flufl确实不存在。 在C++中,名称是区分大小写的。