gpt4 book ai didi

c++ - 模板构造函数和 typedef 迭代器

转载 作者:行者123 更新时间:2023-11-30 03:03:09 24 4
gpt4 key购买 nike

我想定义一个构造函数,它可以与任何具有开始、结束、运算符++的构造函数一起工作。换句话说,我想得到这种行为(评论,工作代码):

/*Polyn(std::vector<double> &a) : CalcDerivative(0) , CalcIntegral(0) {
for(std::vector<double>::iterator i = a.begin();i < a.end();++i)
params.push_back(*i);
}*/

与其他迭代器。 (例如也列出)。

template <typename T>
Polyn(const T &a) : CalcDerivative(0) , CalcIntegral(0) {
typename std::vector<T>::iterator iter;
for(iter i = a.begin();i < a.end();++i) //LINEA 18!!
params.push_back(*i);
}

我得到的是这个编译错误:

polyn.h: In constructor ‘Polyn::Polyn(const T&)’:
polyn.h:18: error: expected ‘;’ before ‘i’

为什么?如何修复我的代码?

最佳答案

首先函数的参数类型应该是std::vector<T> const &而不是 T const & .然后你应该使用 const_iterator :

typename std::vector<T>::const_iterator iter;

因为 vector a是一个常量对象。

如果您将构造函数实现为:

template <typename T>
Polyn(const std::vector<T> &a)
: params(a.begin(), a.end()), CalcDerivative(0) , CalcIntegral(0)
{
}

即初始化params在成员初始化列表本身中。

关于c++ - 模板构造函数和 typedef 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556998/

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