调用构造与函数原型混淆

时间:2013-02-04 07:07:13

标签: c++

我遇到了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。

1 个答案:

答案 0 :(得分:3)

这是C ++中的一个怪癖,只有在你被它咬了之后才能知道 这是C ++中的 most vexing parse