0

我在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, ","));
    }

我的问题是为什么以及任何人都可以指出关于为什么编译器将此变量声明与函数原型混淆的好信息(我已经编写了大量代码,在我看来,语法完全相同并且从未遇到过这个问题前)?谢谢!

我正在使用视觉工作室 2008。

4

1 回答 1

3

这是 C++ 中的怪癖之一,只有在你被它咬过之后你才会知道。
这是C++ 中最令人头疼的解析

于 2013-02-04T07:09:24.180 回答