Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用构造与函数原型混淆_C++ - Fatal编程技术网

C++ 调用构造与函数原型混淆

C++ 调用构造与函数原型混淆,c++,C++,我在下面的方法1中遇到问题。它在我声明(并构造)VAL的行中给出了警告原型函数未被调用(是否需要变量定义?)。当对紧接在其下方的复制的调用未注释时,我得到错误C2228(“.begin”的左侧必须有class/struct/union) 谷歌搜索为调用默认构造函数(即删除括号)提供了解决方案,但我没有使用默认构造函数,也不明白为什么它无法编译。注意method2编译得很好 static void method1(char const* filename) { vector

我在下面的
方法1
中遇到问题。它在我声明(并构造)VAL的行中给出了警告
原型函数未被调用(是否需要变量定义?
)。当对紧接在其下方的复制的调用未注释时,我得到错误C2228(“.begin”的左侧必须有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, ","));
    }
static void method1(char const*filename){
向量VAL(istream_迭代器(ifstream(filename)),istream_迭代器();
//复制(vals.begin()、vals.end()、ostream_迭代器(cout,“,”));
}
静态无效方法2(字符常量*文件名){
向量VAL;
VAL=向量(istream_迭代器(ifstream(filename)),istream_迭代器());
复制(vals.begin()、vals.end()、ostream_迭代器(cout,“,”));
}
我的问题是,为什么编译器会将这个变量声明与函数原型混淆(在我看来,我已经用完全相同的语法编写了大量代码,而且以前从来没有遇到过这个问题),有人能指出这方面的好信息吗?谢谢


<>我使用Visual Studio 2008。

< P>这是C++中的一个怪癖,只有在你被它咬过之后才知道。
这是C++中的<> > > /> > < p>这是C++中的一个怪癖,只有在你被它咬过之后才知道。 这是C++中的<强> <强> >