以下で悩んでい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を使用しています。