struct中的类对象数组

时间:2015-01-31 01:47:31

标签: c++ arrays class struct typedef

我需要在结构中放置一个类对象数组。

头文件中的类:

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();

克++

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();

克++

error: 'aClass' does not name a type

3 个答案:

答案 0 :(得分:5)

你有一个指针的数组,它们是未初始化的,因为你还没有告诉它们指向哪里。使用未初始化的指针会导致未定义的行为,这在您的情况下表现为崩溃。

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

aClass classObject[3];

请注意删除声明中的*。您可以通过执行以下操作来调用该方法:

l_obj.classObject[1].getNum();

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

struct newType_t { .. }

答案 1 :(得分:2)

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

答案 2 :(得分:1)

newType_t l_obj;

这声明了newType_t类的一个实例,它包含指向aClass类实例的三个指针。

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

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

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