【问题标题】:C++ Struct in array, help!数组中的C ++结构,帮助!
【发布时间】:2010-10-08 01:05:29
【问题描述】:

我有一个 iPhone 应用程序,它曾经使用包含数千个小对象的数组作为其数据源。现在,我试图让它使用 C++ Structs,以提高性能。我已经编写了结构体,并将其放在“Particle.h”中:

typedef struct{
   double changeX;
   double changeY;
   double x;
   double y;
}ParticleStruct;

然后,我导入“Particle.h”,并尝试定义数组:

#import "Particle.h"
@implementation ParticleDisplay
struct ParticleStruct particles[];   
///Size will be determined later, this declaration is to make 
 ////the declaration visible to the entire class...

但是,在这一行中,我收到错误消息:“数组类型的元素类型不完整”。 据我所知,其他一切都编译得很好,而且我确信在声明之前已经导入了“Particle.h”。 有什么想法吗?

【问题讨论】:

    标签: c++ iphone objective-c arrays struct


    【解决方案1】:

    由于您已经在 Particle.h 中 typedefed 它,因此请从数组声明行(错误所在的行)中删除单词 struct

    然而,

    • 在C++中,不需要typedef,直接写struct Particle { /* members */ };

    • 为什么要声明一个没有长度的数组?考虑使用std::vector (tutorial),它是一个动态 可重新调整大小的数组(您不必担心长度)。很简单:std::vector< Particle > particles;

    【讨论】:

    • 我尝试使用向量,但是#include 抛出错误,说没有这样的文件或目录。
    • @Chris:嗯.. 那么它与(iphone)开发环境有关。我对此一无所知。对不起。
    • 将您的实现文件类型更改为 sourcecode.cpp.objcpp 然后您的 #include 应该可以工作(包含在实现文件中而不是头文件中)。
    【解决方案2】:

    首先,在 c++ 中你不需要 typedef 你的结构。您不需要使用 struct 关键字来声明具有某种结构类型的变量:

     ParticleStruct *particles;
    

    为您的变量使用指针(如上)。然后你可以为它动态分配内存。或者更好的是,使用vector

    vector<ParticleStruct> particles;
    

    看来你需要熟悉c++。考虑阅读a book or two

    【讨论】:

    • 是的,我一直在考虑直接学习这门语言,但我很少在 iPhone 开发中使用 C++,而且当我需要时,我通常可以在互联网的帮助下勉强度日......也许当我从学校休息一下......
    • @Chris:另外,不要假设 c++ 比 c 更有效。可以,但是如果您不懂该语言,您只会花费大量时间,并且可能会落后于尝试重新实现一些 c 代码。
    猜你喜欢
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多