0

以下で悩んでいmethod1ます。prototyped function not called (was a variable definition intended?)宣言(および構築)する行で警告が表示されvalsます。そのすぐ下の copy の呼び出しをコメント解除すると、エラー C2228 ( left of '.begin' must have class/struct/union) が発生します。

グーグルは、デフォルトのコンストラクターを呼び出す場合(つまり、括弧を削除する)のソリューションを提供しますが、デフォルトのコンストラクターを使用していないため、これがコンパイルされない理由を理解できません。method2正常にコンパイルされることに注意してください。

    static void method1(char const* filename) {
        vector<double> vals(istream_iterator<double>(ifstream(filename)), istream_iterator<double>());
        //copy(vals.begin(), vals.end(), ostream_iterator<double>(cout, ","));
    }

    static void method2(char const* filename) {
        vector<double> vals;
        vals = vector<double>(istream_iterator<double>(ifstream(filename)), istream_iterator<double>());
        copy(vals.begin(), vals.end(), ostream_iterator<double>(cout, ","));
    }

私の質問は、コンパイラがこの変数宣言を関数プロトタイプと混同している理由についての良い情報を指摘できる理由です(私は、まったく同じ構文でコードをたくさん書いてきましたが、この問題は一度もありませんでした)前)?ありがとう!

ビジュアルスタジオ2008を使用しています。

4

1 に答える 1

3

これは、噛まれて初めてわかる C++ の癖の 1 つです。
これは、C++ で最も厄介な解析です。

于 2013-02-04T07:09:24.180 に答える