在向量中遍历结构成员时出错
Error Iterating Through Members of a Struct in Vector
我的.h文件中有一个结构和两个向量:
struct FTerm {
int m_delay;
double m_weight;
};
std::vector<FTerm> m_xterms;
std::vector<FTerm> m_yterms;
我已经阅读了一个文件,将值填充到m_xterms和m_yterms中,我正在尝试迭代这些值:
vector<FTerm>::iterator terms;
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
{
int delaylength = m_xterms->m_delay * 2; // Assume stereo
double weight = m_xterms->m_weight;
}
虽然我很确定我的逻辑是错误的,但我目前得到的错误表达式error必须有一个指针类型。我被困了一段时间了,谢谢。
更改
int delaylength = m_xterms->m_delay * 2;
double weight = m_xterms->m_weight;
至
int delaylength = terms->m_delay * 2;
// ^^^^^
double weight = terms->m_weight;
// ^^^^^
因为您希望通过访问值
vector<FTerm>::iterator terms;
环路内
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
// ^^^^^
"虽然我很确定我的逻辑错了,…"
这是无法回答的,除非您提供更多关于逻辑需求的上下文。
连同问题πάῥεῖ指出,您的代码当前存在一个问题,即除了浪费一些时间之外,它根本无法完成任何任务。
考虑:
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
{
int delaylength = m_xterms->m_delay * 2; // Assume stereo
double weight = m_xterms->m_weight;
}
delaylength
和weight
都是在进入块时创建的,在退出时销毁的——所以我们创建一对值,然后销毁它们,并对向量中的尽可能多的项目重复——但永远不要对我们计算的值做任何事情。它们只是经过计算,然后被销毁。
假设你解决了这个问题,我也会以足够不同的方式编写代码,这样这个问题一开始就不太可能发生。例如,假设您真的想修改数组中的每个项,而不是仅仅从中计算一些内容并丢弃结果。你可以用这样的代码做到这一点:
std::transform(m_xterms.begin(), m_xterms.end(), // Source
m_xterms.begin(), // destination
[](FTerm const &t) { return {t.m_delay * 2, t.m_weight}; });// computation
现在,代码实际上完成了一些事情,和似乎我们不太可能意外地把它写错了。
一句话:标准算法是你的朋友。与人类朋友不同,他们喜欢被利用。
相关文章:
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在 Clang 中使用指向成员的指针时出错
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- 通过多个类访问成员时出错
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 类和成员函数模板专用化出错
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 调用指向成员函数的指针时出错
- 修改另一个类的向量成员时出错
- 向模板化静态成员初始化添加和不添加'typename'都会出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 推导成员函数包装器的返回类型时出错
- 编译类模板成员函数时出错
- 在 C++ 中访问泛型结构的成员会出错
- 初始化作为结构成员的函数指针时出错
- 类中的const成员出错