0

この時点で、私はほとんどC++の初心者です。私は Java の経験が豊富なので、C++ の構文仕様にはあまり慣れていません。

そうは言っても、.txt ファイルを (行ごとに) 読み取る小さなアプリケーションを作成しようとしています。各行に含まれるコンマの数に基づいて、それぞれのパラメーターを一時的な t1 または t2 変数に送信します。 、Type1 の t1 と Type2 の t2 です。

Type1 と Type2 は Maintype のサブクラスであり、その後、この「Maintype」から「説明」文字列を継承します。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()を返します。これは、C++ の最も厄介な解析としても知られています ...Type1Type2

単純に省略します()

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

そしてそれはあなたが望むことをします。C++11 では、以下も使用できます{}

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