我遇到了method1
以下的麻烦。它在我声明(和构造)prototyped function not called (was a variable definition intended?)
的行处给出警告vals
。当紧接着下面的复制调用被取消注释时,我收到错误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, ","));
}
我的问题是为什么,任何人都可以指出有关编译器为什么将这个变量声明与函数原型混淆的好信息(我编写了大量的代码,看起来像我一样,语法完全相同,从来没有之前遇到过这个问题)?谢谢!
我正在使用visual studio 2008。