首页天道酬勤不允许使用继承成员,c++不允许使用不完整的类型

不允许使用继承成员,c++不允许使用不完整的类型

张世龙 05-04 02:30 83次浏览

示例事先粘贴简单的c类构造代码。

includeiostreamusingnamespacestd; 类地址; //预声明类class Address//声明类{ private : const char * m _ province; //省const char *m_city; //城市const char *m_district; //块公共:地址(const char * province,const char *city,const char *disrtict ); //构造函数~地址(; //析构函数; 地址:地址(const char * province,const char *city,const char *disrtict ) :m_province ) province, m_district(disrtict ) address3360:~address ) ({}int main ) ) address*addr=newaddress )、' Shanxi '、' }上述代码是标准声明类、新对象的示例。 上述代码的一个特殊之处是,所有字符指针都声明为const char常量类型。 因为我在vs2017上运行此程序,所以vs2017不能再使用c 11标准用字符指针指向固定长度的字符串。 因此,类中的所有字符指针成员都被声明为常量类型,构造函数的参数也同样被声明为常量类型。

由于成员变量是常量类型,因此构造函数也只能使用构造函数初始化列表初始化成员变量,如上所述。

虽然上面在某种意义上是无稽之谈,但为了避免在理解上述代码时出现误差,以下情况才是发生错误的主要原因:

使用不存在的类以上的代码中只有一个类Address,并且无论程序以何种方式使用其他类的名称,都将报告“不能使用不完整类型”。

例如,说如下,百分之百地报告这个错误。

从属斯托(zzy )、24、92.5f ); 这种情况在使用头文件引入到其他cpp文件中的类的结果不成功的错误结果中也很常见。

另一个尴尬的情况是,自己在使用Address类时拼错了。

adressaddr(Shanxi )、) xian )、) yanta ); 因为拼写错了,编译器只会认为你自己用了另一个班。 那个我还不知道,所以一定要报告同样的错误。

在编译器获取类的所有信息之前调用类,并在定义类时进行一些更改。

class address { private : const char * m _ province; const char *m_city; const char *m_district; 地址共享; //添加了一句此公共:地址(const char * province,const char *city,const char *disrtict )。 ~Address (; (;

马上,报告错了。 错误的类型也是“不允许使用不完整的类型”。

错误的本质很简单。 类还没有完全定义就被调用了。 c是自上而下编译的,前往Address whathappend。在此语句中,没有完全定义Address类(从示例程序中至少没有定义构造函数),也没有定义完整的类编译器当然不会使用,所以报告错误。

但是,写如下,可以。

原因也比较简单,类的指针不受类内容的影响。 它只是指针,指向你定义的类。 关于这个班是什么,即使不知道——也不需要知道。 编译器可以让它通过。

vs2010无法解析的外部符号,vs无法解析的外部命令