cocos2d 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int---->解决方法

写了一个对应让其出的错误(其实也挺不容易的喔 )

错误如下:

1>d:\work\win32project\testeachotherclude\testeachotherclude\test2.h(9): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
1>d:\work\win32project\testeachotherclude\testeachotherclude\test2.h(9): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\work\win32project\testeachotherclude\testeachotherclude\test2.h(9): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\work\win32project\testeachotherclude\testeachotherclude\test2.h(10): error C2061: 语法错误: 标识符“Test1”
1>d:\work\win32project\testeachotherclude\testeachotherclude\testeachotherclude.cpp(15): error C2660: “Test2::className”: 函数不接受 1 个参数
1>d:\work\win32project\testeachotherclude\testeachotherclude\testeachotherclude.cpp(16): error C2039: “test1”: 不是“Test2”的成员
1>          d:\work\win32project\testeachotherclude\testeachotherclude\test2.h(7) : 参见“Test2”的声明
1>d:\work\win32project\testeachotherclude\testeachotherclude\testeachotherclude.cpp(16): error C2227: “->refMe”的左边必须指向类/结构/联合/泛型类型

上传Test方便大家看:

main.cpp

[cpp] view plaincopy
 
  1. #include "stdafx.h"  
  2. #include "Test1.h"  
  3. #include "Test2.h"  
  4.   
  5. int _tmain(int argc, _TCHAR* argv[])  
  6. {  
  7.     Test1* t1=new Test1();  
  8.     Test2* t2=new Test2();  
  9.     t1->className(t2);  
  10.     t1->test2->refMe();  
  11.   
  12.     t2->className(t1);  
  13.     t2->test1->refMe();  
  14.     return 0;  
  15. }  

再来看Test1的

Test1.h

[cpp] view plaincopy
 
  1. #ifndef Test1_H  
  2. #define Test1_H  
  3.   
  4. #include "Test2.h"  
  5.   
  6. class Test1  
  7. {  
  8. public:  
  9.     Test2* test2;  
  10.     void Test1::className(Test2* test2);  
  11.     void refMe();  
  12. };  
  13. #endif;  

Test1.cpp

[cpp] view plaincopy
 
  1. #include "Test2.h"  
  2.   
  3. void Test1::className(Test2* test2)  
  4. {  
  5.     this->test2=test2;  
  6.     std::cout<<"Test1  ";  
  7. }  
  8.   
  9. void Test1::refMe()  
  10. {  
  11.     std::cout<<"refMe Test1"<<std::endl;  
  12. }  

Test2.h

[cpp] view plaincopy
 
  1. #ifndef Test2_H  
  2. #define Test2_H  
  3.   
  4. #include "Test1.h"  
  5.   
  6. class Test2  
  7. {  
  8. public:  
  9.     Test1* test1;  
  10.     void className(Test1* test1);  
  11.     void refMe();  
  12. };  
  13. #endif  

Test2.cpp

[cpp] view plaincopy
 
  1. #include "StdAfx.h"  
  2. #include "Test2.h"  
  3. #include <iostream>  
  4.   
  5. void Test2::className(Test1* test1)  
  6. {  
  7.     this->test1=test1;  
  8.     std::cout<<"Test2  ";  
  9. }  
  10.   
  11. void Test2::refMe()  
  12. {  
  13.     std::cout<<"refMe Test2"<<std::endl;  
  14. }  


然后运行就报上面的一对错误了...

仔细看看发现两个头文件都彼此包含了,就是这个问题啦...那我们怎么解决了,上传我的代码,直接看这样更容易理解  main.cpp不变

Test1.h

[cpp] view plaincopy
 
  1. #ifndef Test1_H  
  2. #define Test1_H  
  3. //#include "Test2.h" //用下面的方式替代  
  4. class Test2;//注意:只是告诉编译器,需要这个类,其他功能结构等都没  
  5.   
  6. class Test1  
  7. {  
  8. public:  
  9.     Test2* test2;  
  10.     void Test1::className(Test2* test2);  
  11.     void refMe();  
  12. };  
  13. #endif;  


 Test1.cpp

[cpp] view plaincopy
 
  1. #include "StdAfx.h"  
  2. #include "Test1.h"  
  3. #include <iostream>  
  4.   
  5. #include "Test2.h" //注意:这里才是真正的包含  
  6.   
  7. void Test1::className(Test2* test2)  
  8. {  
  9.     this->test2=test2;  
  10.     std::cout<<"Test1  ";  
  11. }  
  12.   
  13. void Test1::refMe()  
  14. {  
  15.     std::cout<<"refMe Test1"<<std::endl;  
  16. }  


Tes2的我就不贴了,一样的道理,编译运行ok ....

posted @ 2014-03-26 15:22  yufenghou  阅读(2794)  评论(0编辑  收藏  举报