0

在这一点上,我几乎是一个 C++ 新手。我对 Java 比较有经验,所以我真的不习惯 C++ 的语法规范。

话虽如此,我正在尝试制作一个小型应用程序,它将读取 .txt 文件(逐行),并且根据每行有多少个逗号,它将各自的参数发送到临时 t1 或 t2 变量, 为 Type1 的 t1 和 Type2 的 t2。

Type1 和 Type2 是 Maintype 的子类,随后从这个“Maintype”继承一个“description”字符串。Type1 和 Type2 都有各自的参数(setName、setSize 等)的 set() 方法,但我无法让这个东西工作。这是我到目前为止的进展,为了便于理解,我对其进行了评论:

void Test::readFile(string f)
{
    int c = 0;
    int com = 0;
    fstream file;
    file.open(f);
    string line;
    stringstream ss(line);
    if (!file)
        cout << "File not found!" << endl;
    while (!file.eof())
    {
        c = 0;
        getline(file, line, '\n');
        if (line.size() > 0)
        {
            com = count(line.begin(), line.end(), ','); // Count commas         
            Type1 t1(); // Temporary t1
            Type2 t2(); // Temporary t2
            String description;
            std::string token;
            while (std::getline(ss, token, ','))
            { // Might change this while later if necessary
                if (c == 0)
                { // First parameter is description
                    description = token;
                    c++;
                }
                else if (com > 1)
                { // If more than one comma
                    t1.setDesc(description);
                    t1.setName(token);
                    // Next token
                    t1.setSize( /*convert token string to int*/ );
                    // ---End reading string
                    // ---Send t1 to a list of Maintypes
                }
                else
                { // Local natural
                    t2.setDesc(description);
                    t2.setTime( /*convert token string to int*/ );
                    // ---End reading string
                    // ---Sent t2 to a list of Maintypes

                }

            }
        }
        file.close();
    }
}

我很确定我没有正确执行 setDesc 等,它说'表达式必须具有类类型'。现在我知道这不是 Java,但我真的不习惯。另外,关于方法本身,我是否以正确的方式实现文件读取解决方案?

非常感谢!

4

1 回答 1

2

这些行

Type1 t1(); //not a Temporary t1
Type2 t2(); //not a Temporary t2

不要按照你的想法去做:它们分别声明函数t1()并且t2()不带参数并返回Type1and Type2。这也被称为 C++ 最令人头疼的解析...

简单地省略()

Type1 t1; //Temporary t1
Type2 t2; //Temporary t2

它做你想做的事。在 C++11 中,您还可以使用{}

Type1 t1{}; //Temporary t1
Type2 t2{}; //Temporary t2
于 2013-10-27T15:03:08.493 回答