class 结构中的对象数组

class object array inside struct

我需要将 class 个对象的数组放入结构中。

头文件里面的class:

class aClass
{
private:
   int num;
public:
   aClass();
   ~aClass();
   int getNum();
   void setNum(int num);
}

另一个头文件中的typedef

#include "aClass.hpp"

typedef struct
{
   aClass* classObject[3];
} newType_t;

至少申请

newType_t l_obj;
l_obj.classObject[1]->getNum();

编译器可以运行,但在执行时出现分段错误。如何正确定义类型?

非常感谢 亚历克斯


第二次尝试:

aClass.hpp

class aClass
{
private:
   int num;
public:
   aClass();
   ~aClass();
   int getNum();
   void setNum(int num);
};

app.hpp

class aClass;

typedef struct
{
   aClass classObject[3];
} newType_t;

app.cpp

newType_t l_obj;
l_obj.classObject[1].getNum();

g++

error: field 'classObject' has incomplete type

再试一次:

aClass.hpp

class aClass
{
private:
   int num;
public:
   aClass();
   ~aClass();
   int getNum();
   void setNum(int num);
};

app.hpp

#include "aClass.hpp"
typedef struct
{
   aClass classObject[3];
} newType_t;

app.cpp

newType_t l_obj;
l_obj.classObject[1].getNum();

g++

error: 'aClass' does not name a type

您有一个 指针数组 ,它们未初始化,因为您没有告诉它们指向何处。使用未初始化的指针会导致未定义的行为,在您的案例中表现为崩溃。

你应该有一个对象数组,因为这里没有指针:

aClass classObject[3];

注意删除声明中的 *。您可以通过以下方式调用该方法:

l_obj.classObject[1].getNum();

此外,typedef struct是不必要的。您可以直接命名您的结构:

struct newType_t { .. }

您尚未初始化您的指针,因此使用 _obj.classObject[1]-> 访问它们会导致未定义的行为(如分段错误)。

newType_t l_obj;

这声明了 newType_t class 的实例,其中包含三个指向 aClass class.

实例的指针

指针未初始化为指向任何有效的实例化对象。

l_obj.classObject[1]->getNum();

这取消了对数组中第二个指针的引用。由于此指针未初始化为有效的实例化对象。在您的情况下,这会导致分段错误。