【问题标题】:C++ classes - how to pass vector of custom type to functionC++ 类 - 如何将自定义类型的向量传递给函数
【发布时间】:2011-08-06 00:54:06
【问题描述】:

我正在尝试开发一个带有函数的类,该函数可以将项目向量作为参数。

如果我使用 int 类型的向量或其他原语,我可以让它正常工作,但我不能让它与对象向量一起工作。

例如:

在我的头文件中:

int influenceParticles(vector<Particle> particles);

这是我所追求的,但不会编译(错误声明是"'Particle' was not declared in this scope")。

particle.h 文件已包含在此头文件的顶部。

澄清

这是给我错误的 .h 文件

#ifndef _PARTICLE_ATTRACTOR
#define _PARTICLE_ATTRACTOR

#include "ofMain.h"
#include "particle.h"


class ParticleAttractor {

    //private
public:

    ParticleAttractor(int posX, int posY); //constructor (void)

    int influenceParticles(vector<Particle> particles);

};


#endif 

【问题讨论】:

  • 请剪切并粘贴您可以构建的显示错误的绝对最短的完整程序。提示:您应该能够将其减少到 6 或 7 行。
  • 您的particle.h 文件是否还包含具有影响粒子的头文件?
  • 如果确实是 st​​d::vector,您可能应该直接包含 vector.h 并将 vector 限定为 std::vector。
  • @Slavik81: +1 关于向量的限定和需要包含标头,但它是 #include &lt;vector&gt; 没有 h,h 从未在标准中,并且仅在编译器中允许用于向后兼容预标准代码。

标签: c++ class parameters vector arguments


【解决方案1】:

也许你有循环包含,即。如果 ParticleAttractor.h 还包含 Particle.h。为了解决这个问题,您应该在 ParticleAttractor.h 中进行 Particle 的前向声明:

class Particle;

您还应该考虑通过引用传递向量以避免复制:

int influenceParticles(vector<Particle>& particles);

【讨论】:

  • 非常好,正是我所追求的。也感谢您的参考提示
【解决方案2】:

第一个Particle 必须是已定义的类型。这个定义应该有效:

int influenceParticles(vector<vector<int> > particles); 

为了实践,最好使用按引用参数类型而不是按值。所以最好把它定义为:

int influenceParticles(vector<vector<int> >& particles); 

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 2022-07-27
    • 2014-04-03
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多