"xxxx" does not name a type是怎么一回事

作者&投稿:阴满 (若有异议请与网页底部的电邮联系)
C++ 编译时提示 'xxx' does not name a type~

ANode 是AClass中的一个private类型,find的返回参数是public的,却要用到private的类型,就有问题了。
在一个源文件中,要声明或定义一个类的指针时,必须在使用前声明或定义该类,因此下面的代码会报错:
class A{public: B *b;};class B{public: A *a;};int main(){ return 0;}12345678910111213141516
报错为“error: ‘B’ does not name a type”,就是因为在A类中使用B *b之前没有声明或定义B类,如果在第一行加上一句前置声明(forward declaration)“class B;”,就不会有这样的问题了。 而在头文件互相包含时,也会引发“error: ‘xxx’ does not name a type”,其报错原因和上面的代码是相同的,请看下面的代码:a.h:
#ifndef A_H_INCLUDED#define A_H_INCLUDED#include "b.h"class A{public: B *b;};#endif // A_H_INCLUDED123456789101112
b.h:
#ifndef B_H_INCLUDED#define B_H_INCLUDED#include "a.h"class B{public: A *a;};#endif // B_H_INCLUDED123456789101112
main.cpp:
#include "a.h"#include "b.h"int main(){ return 0;}1234567
编译就会报错:“error: ‘A’ does not name a type”,为什么会这样呢?我们看看a.h经过预处理会展开成什么样子呢,预处理命令为“gcc -E -o a.i a.h”:
# 1 "a.h"# 1 ""# 1 ""# 1 "a.h"# 1 "b.h" 1# 1 "a.h" 1# 5 "b.h" 2class B{public: A *a;};# 5 "a.h" 2class A{public: B *b;};1234567891011121314151617181920212223242526
忽略以“#”开头的行,我们发现它现在和开头的那个源文件几乎是一样的,只是类的顺序交换了,因此出错原因和开头的那个源文件是一样的。 解决方法也很简单,把a.h的“#include “b.h””替换为B类的前置声明“class B;”,在b.h中也进行类似的修改。这样的话,就不会导致问题了。当然,这么做是有前提的:在A类中的成员只有B类的指针,而不能有B类的变量;同时不能在A类头文件中访问B类的成员或成员函数。无论哪种情况A类都需要知道B类的大小或其他细节,前置声明无法提供这些细节,又会出现类似“error: field ‘b’ has incomplete type ‘B’”这样的问题。

代码是什么样的

XXX应该是一种用户定义的数据类型,而由于没有声明或者拼写错误或者与关键词重名,导致编译有错,出现类型错误。

在一个源文件中,要声明或定义一个类的指针时,必须在使用前声明或定义该类,因此下面的代码会报错:class A{public:    B *b;};class B{public:    A *a;};int main(){    return 0;}12345678910111213141516

报错为“error: ‘B’ does not name a type”,就是因为在A类中使用B *b之前没有声明或定义B类,如果在第一行加上一句前置声明(forward declaration)“class B;”,就不会有这样的问题了。

 而在头文件互相包含时,也会引发“error: ‘xxx’ does not name a type”,其报错原因和上面的代码是相同的,请看下面的代码:a.h:

#ifndef A_H_INCLUDED#define A_H_INCLUDED#include "b.h"class A{public:    B *b;};#endif // A_H_INCLUDED123456789101112

b.h:#ifndef B_H_INCLUDED#define B_H_INCLUDED#include "a.h"class B{public:    A *a;};#endif // B_H_INCLUDED123456789101112

main.cpp:#include "a.h"#include "b.h"int main(){    return 0;}1234567

编译就会报错:“error: ‘A’ does not name a type”。

预处理命令为“gcc -E -o a.i a.h”:

# 1 "a.h"# 1 "<built-in>"# 1 "<command-line>"# 1 "a.h"# 1 "b.h" 1# 1 "a.h" 1# 5,"b.h" 2class B{public: A *a;};

# 5 "a.h" 2class A{public: B *b;};1234567891011121314151617181920212223242526。

扩展资料:

C++语言中定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等等,有些运算符需要两个操作数,使用形式为

<操作数1>运算符<操作数2>

这样的运算符称为二元运算符(或二目运算符)。另一些运算符只需要一个操作数,称为一元运算符(或单目运算符)。

运算符具有优先级与结合性。当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。

例如,我们熟悉的算术表达式6+5-2中,“+”、 “-”是同级运算符,那么是先算5-2,还是先算6+5?这就取决于算术运算符的结合性。由于算术运算符的结合性为自左向右,所以应先算6+5,然后再算11-2。

参考资料来源:百度百科-C++



XXX应该是一种用户定义的数据类型,而由于没有声明或者拼写错误或者与关键词重名,导致编译有错,出现类型错误。


英语翻译 我常听别人说:"XXXX".翻译成英文
i always heard it was said that"

电脑总提示"XXXX文件损坏不能读取,请运行chkdsk工具"是怎么个意思,如何...
具体步骤如下:在我的电脑中选中盘符C 后单击鼠标右键选属性,在弹出的驱动器属性窗口中依次选择“工具→开始检查”并选择“自动修复文件系统错误”和“扫描并恢复坏扇区”,然后点击开始,扫描时间会因磁盘容量及扫描选项的不同而有所差异(按上面的方法做后,会弹出一个框,点是,自动关机后在开机进行...

我的机器在运行游戏时候有时突然弹出现 "XXXX"内存不可以为可读是什么意...
一、应用程序没有检查内存分配失败 程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。内存不是永远都招...

SQLServer 数据库提示“错误的语法:"XXXX"必须是批处理中仅有的语句...
1、 报错原因分析:批处理必须从create语句开始。换句话说,查询分析器中只有一个批处理语句是标准语法。因为在批处理中,create default、create function、create procedure、create rule、create schema、create trigger和create view语句不能与其他语句组合。批处理之后的所有其他语句将被解释为第一个已知cre...

求歌词中有句 "xxxx.爱不爱我,xxxx"是个男生唱的,歌曲很多说唱的部分...
愛不愛我 大嘴巴 对我说 爱不爱我 需要你再说爱我要不就 换我来说 I LOVE YOU(我爱你)HUSH HUSH HUSH 我对你说不管谆谆耳边 甚至杞人忧天勇气能无边界 只要见你笑脸不管远在天边 甚至常常失联决心能无底限 心有你助拳黑多白白多黑 我不会退却累多苦苦多累 无所谓非多是是多非 我不会...

"xxxx" does not name a type是怎么一回事
XXX应该是一种用户定义的数据类型,而由于没有声明或者拼写错误或者与关键词重名,导致编译有错,出现类型错误。

"xxxx" does not name a type是怎么一回事
就是“xxxx”不是正确的命名方式,意思就是你的命名是错误的,不符合命名要求

...代表作的好句好段越多越好!及点评例如:"XXXXXXXXX"一句句子 点评:XX...
途中并不顺利,半道碰上一位瘦高个的年青普鲁士军官,因为垂涎于羊脂球,提出了要羊脂球陪他过夜的要求,否则便要把全车的人无限期的扣留。羊脂球虽然是个妓女,但本着对侵略者的仇恨和对自己祖国的热爱,愤而不从。普鲁士军官是深知人性的本性的,他紧抓着手里的王牌“他的意思是他的希望一天得不到...

我不能将话xxxx的说完,求"xxxx"是什么成语
言简意赅 明白了当 简明扼要

节能设计模型观察时出现"XXXX房间墙关系错误,请重新搜索房间!"是怎么...
是你的墙高跟层高对不上,高度应该是一致的才可以。还有一种可能就是你的墙没有完全封闭。如果这两种可能排除后,应该就没有事情了。

密山市18463814631: 请问东芝的一个广告语 -
暴娣小儿: ENTER,智趣人生 领先主流的睿智杰作 年轻一族的…炫色时尚 宽屏享受 瞬间激活你…智趣人生

密山市18463814631: ie创建的快捷方式打开提示找不到文件quot;xxxxquot;请肯定文件名是不是正确后再试1次..
暴娣小儿: 应当是你的IE阅读器程序毛病或破坏了,建议你重新安装1E阅读器还有多是你的1E安装程序位置有变化,你桌面的快捷键找不到位置,所以进不去,解决方法是找到源文件,然后发送快捷方式到桌面.祝你成功!

密山市18463814631: 应用程序错误,怎么办????是不是内存不够? -
暴娣小儿: 换一个内存试试,不行得话应该是该重装操作系统了.

密山市18463814631: "数学化"怎么翻译
暴娣小儿: 这是XML的语法. 其中&XXXX; 是各种特殊符号. &quot; 是引号, &amp; 就是 &. &quot;数学化&quot; 就是 "数学化"

密山市18463814631: 点"x"关闭程序而不是最小化怎么设置? -
暴娣小儿: 啊 你的问题真多在桌面 长按左下角第三个键(win键)出现后按导航键右 可以显示软件自带退出 就不要用这个强行退出比如短信 资源管理器可以用上面方法

密山市18463814631: 文件夹被自己隐藏,怎么修改回来? -
暴娣小儿: 比如你的C盘有个文件夹叫&quot,到要隐藏回去的时候再加回即可.只是这样你的隐藏术就给破了.你直接找到程序WinRAR;的;.{xxx-xxx}"去掉,即可,你就在winRAR里找到C盘,在WinRAR里面就显示出来C盘里面的所有文件夹.包括那个&quot.{xxx-xxx}"后面的&quot.用WinRAR打开并重命名;,这样就可以在这里右击这个文件夹,点重命名,把"我的电脑;我的电脑.{xxx-xxx}&quot.如果是在文件夹后面加了{xxx-xxxx}这类的而变了的话,运行它;我的电脑.{xxx-xxx}&quot.找WinRAR.把后面部分剪掉如果是图标变了 请照1楼的做

密山市18463814631: System.out,print(""+i+""+j)在Java中表示什么意思 -
暴娣小儿: system.out.print(xxxx);实在控制台显示一段字符串xxxx为被显示的字符串"i="+i是拼接字符串假设i=1的话就是"i=" + 1最后...

密山市18463814631: DNF进入到角色画面,卡在那里,无法开始游戏 -
暴娣小儿: xxxx&quot,如果不行一定再仔细看下前面的步骤,照着做就行,特别是输入命令的部分,显示的是你的电脑上所有的网络连接方式,第一列是mtu值,并在右下角任务栏内显示红叉,这个命令是查看你的连线名称和MTU值的,可以再打开用户账...

密山市18463814631: 如何在C的字符串中输入"\" -
暴娣小儿: 输入??就输入“\” 如果就是在代码中把“\”放进去 就按照楼上各位的方法

密山市18463814631: "飅"怎么念,什么意思?
暴娣小儿: 飅 拼音:liú 注音:ㄌㄧㄡˊ 部首:风,部外笔画:12,总笔画:21

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网