does not name a type?

从头来过 2012-03-14 06:33:09
//以下为类A
#include<B.h>
typedef enum{
int a;
int b;
}def_t;
class A{

};
//以下为类B
#include<A.h>
class A;
class B{
def_t def;
};

为什么报def_t未定义啊?
...全文
4440 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
从头来过 2012-03-15
  • 打赏
  • 举报
回复
嗯 #ifnded
#define
#endif
都有写,目前查找问题是A B互相包含了 ,谢谢各位 结贴
lyhylex 2012-03-15
  • 打赏
  • 举报
回复
你两个头文件相互包含了,
这样依赖了头文件包含顺序了,

怎么没有
#pragma once
或者
#ifndef _A_H_
...
...
#define _A_H_
#endif

有时候可能先包含"B.h"
再包含"A.h"
这样A.h的内容就在B.h后面了

这些呢?
qqwangtanhua 2012-03-15
  • 打赏
  • 举报
回复
看不懂
支持英文数字 2012-03-15
  • 打赏
  • 举报
回复
有些没注意到。mark下。
  • 打赏
  • 举报
回复
a.h别包含b.h
从头来过 2012-03-15
  • 打赏
  • 举报
回复
加了呢[Quote=引用 6 楼 xiyoulaoyuanjia 的回复:]
加头文件吧 青年!。。。
[/Quote]
从头来过 2012-03-15
  • 打赏
  • 举报
回复
使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
而且我用了#inlucede也还是报错未定义。""[Quote=引用 7 楼 lou0378 的回复:]
楼主又把系统头文件和用户头文件搞混了,包含系统头文件用 #include <头文件>,包含用户头文件用 #include "头文件",一个是用尖括号,一个是用双引号,如果包含的头文件是用户自己定义的,而且是用尖括号,编译也通不过的。
你的代码修改为:

//以下为类A
#include "B.h"
typedef union{
a,b
}def_t;
class A{

}……
[/Quote]
  • 打赏
  • 举报
回复
楼主又把系统头文件和用户头文件搞混了,包含系统头文件用 #include <头文件>,包含用户头文件用 #include "头文件",一个是用尖括号,一个是用双引号,如果包含的头文件是用户自己定义的,而且是用尖括号,编译也通不过的。
你的代码修改为:

//以下为类A
#include "B.h"
typedef union{
a,b
}def_t;
class A{

};
//以下为类B
#include "A.h"
class A;
class B{
def_t def;
};
xiyoulaoyuanjia 2012-03-14
  • 打赏
  • 举报
回复
加头文件吧 青年!。。。
blingpro 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 c_c_study 的回复:]

引用 2 楼 lou0378 的回复:
唉,楼主你好像没搞清什么是枚举类型吧,你是不是把enum和struct这个关键字的意思搞混了,enum是定义枚举类型的,而枚举类型里面的成员都是常量,并且不能在里面定义变量的,struct关键字是定义结构体类型的;结构体中可以定义变量或函数。
修改如下:
typedef enum{
a,b}def_t;
这里的a和b是常量,a的值是0,b的值是1……
[/Quote]

这样应该没有错的,头文件包括#include"A.h"
从头来过 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lou0378 的回复:]
唉,楼主你好像没搞清什么是枚举类型吧,你是不是把enum和struct这个关键字的意思搞混了,enum是定义枚举类型的,而枚举类型里面的成员都是常量,并且不能在里面定义变量的,struct关键字是定义结构体类型的;结构体中可以定义变量或函数。
修改如下:
typedef enum{
a,b}def_t;
这里的a和b是常量,a的值是0,b的值是1
[/Quote]我往这上面写错了,代码是:
//以下为类A
#include<B.h>
typedef union{
int a;
int b;
}def_t;
class A{

};
//以下为类B
#include<A.h>
class A;
class B{
def_t def;
};
报错,未找到这个类型
qixing1115 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lou0378 的回复:]
唉,楼主你好像没搞清什么是枚举类型吧,你是不是把enum和struct这个关键字的意思搞混了,enum是定义枚举类型的,而枚举类型里面的成员都是常量,并且不能在里面定义变量的,struct关键字是定义结构体类型的;结构体中可以定义变量或函数。
修改如下:
typedef enum{
a,b}def_t;
这里的a和b是常量,a的值是0,b的值是1
[/Quote]
楼主对类、结构体、枚举搞混了
  • 打赏
  • 举报
回复
唉,楼主你好像没搞清什么是枚举类型吧,你是不是把enum和struct这个关键字的意思搞混了,enum是定义枚举类型的,而枚举类型里面的成员都是常量,并且不能在里面定义变量的,struct关键字是定义结构体类型的;结构体中可以定义变量或函数。
修改如下:
typedef enum{
a,b}def_t;
这里的a和b是常量,a的值是0,b的值是1
blingpro 2012-03-14
  • 打赏
  • 举报
回复
typedef enum{
a,b
}def_t;

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧