C++ Can';t在其他类别c和x2B之前访问类别+;
嘿,伙计们,我很难按照我需要的方式设置头文件。为了简化我的问题,这里有一个例子:C++ Can';t在其他类别c和x2B之前访问类别+;,c++,class,function,header,C++,Class,Function,Header,嘿,伙计们,我很难按照我需要的方式设置头文件。为了简化我的问题,这里有一个例子: #ifndef MYHEADER_H #define MYHEADER_H class Parent { Child mykid; //a kid of mine void dosomething(void); }; class Child { Parent * mydad; //pointer back to my dad void dosomethin
#ifndef MYHEADER_H
#define MYHEADER_H
class Parent
{
Child mykid; //a kid of mine
void dosomething(void);
};
class Child
{
Parent * mydad; //pointer back to my dad
void dosomething(void);
};
#endif // MYHEADER_H
我基本上需要在编译器知道之前在另一个类中使用一个类。在我定义类的内部之前,有没有办法告诉编译器我的类?这是:
class Parent;
class Child
{
Parent * mydad; //pointer back to my dad
void dosomething(void);
};
class Parent
{
Child mykid; //a kid of mine
void dosomething(void);
};
建议:在单独的标题中移动它们,在Child.h
中向前声明Parent
,并在Parent.h
中包含“Child.h”
Parent
需要完整定义Child
才能工作,Child
只需要声明
我还建议您停止使用原始指针。这:
class Parent;
class Child
{
Parent * mydad; //pointer back to my dad
void dosomething(void);
};
class Parent
{
Child mykid; //a kid of mine
void dosomething(void);
};
建议:在单独的标题中移动它们,在Child.h
中向前声明Parent
,并在Parent.h
中包含“Child.h”
Parent
需要完整定义Child
才能工作,Child
只需要声明
我还建议您停止使用原始指针。当然:
class Parent;
class Child { Parent * dad; };
class Parent { Child kid; };
要定义类,所有类成员都必须具有完整类型<代码>类父级代码>使父项成为不完整的类型。但是,对于任何类型的T
,无论是完整的还是不完整的,T*
始终是完整的类型。确定:
class Parent;
class Child { Parent * dad; };
class Parent { Child kid; };
class Parent;
class Child
{
Parent * mydad; // it's enough to know class exists
void dosomething(void);
};
class Parent
{
Child mykid; // We must know size of a class
void dosomething(void);
};
要定义类,所有类成员都必须具有完整类型<代码>类父级代码>使父项成为不完整的类型。但是,对于任何类型的
T
,无论是完整的还是不完整的,T*
始终是一个完整的类型。Parent
包含一个Child
对象,因此它的定义必须在Child
的定义之后;这是需要完整定义的类型的用途之一
class Parent;
class Child
{
Parent * mydad; // it's enough to know class exists
void dosomething(void);
};
class Parent
{
Child mykid; // We must know size of a class
void dosomething(void);
};
子项
仅包含指向父项的指针,因此它只需要父项类型的声明
因此,您需要:
// Declaration
class Parent;
// Definitions
class Child
{
Parent * mydad; // type can be incomplete
void dosomething(void);
};
class Parent
{
Child mykid; // type must be complete
void dosomething(void);
};
当一个类型被声明但没有定义时,它被称为不完整。您可以对不完整的类型执行各种操作,包括声明指针和对它的引用,以及在函数声明中将它用作参数或返回类型。您不能创建该类型的对象(包括声明该类型的非静态类成员),因为这需要定义才能知道各种事实,例如其大小。
Parent
包含一个Child
对象,因此其定义必须在Child
的定义之后;这是需要完整定义的类型的用途之一
子项
仅包含指向父项的指针,因此它只需要父项类型的声明
因此,您需要:
// Declaration
class Parent;
// Definitions
class Child
{
Parent * mydad; // type can be incomplete
void dosomething(void);
};
class Parent
{
Child mykid; // type must be complete
void dosomething(void);
};
当一个类型被声明但没有定义时,它被称为不完整。您可以对不完整的类型执行各种操作,包括声明指针和对它的引用,以及在函数声明中将它用作参数或返回类型。您不能创建该类型的对象(包括声明该类型的非静态类成员),因为这需要定义才能知道各种事实,例如其大小。谢谢,这将有望满足我的需要,谢谢您的建议!感谢这将有望为我所需要的工作,并感谢的建议!