调用构造与函数原型混淆

Calling construct confused with function prototype

本文关键字:原型 函数 调用      更新时间:2023-10-16

我在下面的method1遇到问题。它在我声明(和构造)vals的行中给出警告prototyped function not called (was a variable definition intended?)。当下面的复制调用未注释时,我收到错误 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。

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