我需要在结构中放置一个类对象数组。
头文件中的类:
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
答案 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();
这取消引用数组中的第二个指针。由于此指针未初始化为有效的实例化对象。在您的情况下,这会导致分段错误。