gpt4 book ai didi

c++ - 调用构造与函数原型(prototype)混淆

转载 作者:行者123 更新时间:2023-11-28 00:49:53 25 4
gpt4 key购买 nike

我在使用下面的 method1 时遇到了问题。它在我声明(和构造)vals 的行中给出警告 prototyped function not called (was a variable definition intended?)。当对下面的复制调用取消注释时,我收到错误 C2228('.begin' 的左侧必须有类/结构/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, ","));
}

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

我正在使用 visual studio 2008。

最佳答案

这是 C++ 中的怪癖之一,您只有在被它咬过之后才会知道。
这是 most vexing parse 在 C++ 中。

关于c++ - 调用构造与函数原型(prototype)混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14681877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com