求高手解答这种现象
我在一个控制台应用程序中建了两个头文件,同样对应两个源文件。一个名为one(one.h和one.cpp),一个名为two(two.h和two.cpp).步骤:
1. one.pp中有一个函数void prnt(MYPOINT point);其中的参数point是two.h中定义的数据类型,现在要使用它所以包含#include"two.h"的这个文件。这里对one.cpp单独编译,没有错误。OK!
2.two.cpp中有一个函数int two_max(int a,int b)用于求最大值,但是在one.cpp中已经有了一个求最大值的函数,所以直接调用它,既int one_max(int a,int b)这个函数就可以了。于是在two.h中也#include"one.h"这个文件,用于调用one.cpp中的函数。但是现在对two.cpp单独编译,则出错了。
提示的第一个信息是:"'MYPOINT' : undeclared identifier";
我觉得这个提示信息说明了编译器没有对two.h进行预编译。为什么呢?
现在的错误令我很费解,按照我上面的思路来写代码,为什么会出现这种问题。
但是,当把two.h中的#include"one.h"注释掉,并且在two.cpp中加上:#include"one.h"这句,则编译全部OK!
??????????????????????????????????????????????????
求大神,高手,至尊解答!!!!
代码:
///////one.h///////
#ifndef ONE_H
#define ONE_H
#include<stdio.h>
#include"two.h"
int one_max(int a,int b);
void prnt(MYPOINT point);
#endif
///////one.h////////
#include"one.cpp"
int one_max(int a,int b)
{
return (a>b)?a:b;
}
void prnt(MYPOINT point)
{
printf("x=%d,y=%d\n",point.x,point.y);
}
//////two.h/////
#ifndef TWO_H
#define TWO_H
#include<stdio.h>
#include"one.h"//若将此句注释掉,并且在two.cpp中加上:#include"one.h"这句,则编译全部OK!
typedef struct Point
{
int x;
int y;
}MYPOINT;
int two_max(int a,int b);
#endif
///two.cpp////
#include"two.h"
//#include"one.h"
int two_max(int a,int b)
{
return one_max(a,b);
}