MFC的一个错误问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 07:40:19
我插入了一个类CMyButton,是继函的CButton;
在CMyView类里声明了一个CButton型变量,当然要在MyView.h里面加上#Include”MyButton.h”(这个大家都知道的)
我又用向导建立了CMyButton里的单击响应函数!
在函数里我需要用到CMyView里的其他变量,于是我就在MyButton.cpp上写了#Include”MyView”,然后在函数中用PView = ((CMyView*)GetParent ()得到CMyView的指针,利用指针PView 指向需要用到的变量!出错了!
出错是:
error C2143: syntax error : missing ';' before '*'
e:\dd\my\my.h(23) : error C2501: 'CMyDoc' : missing storage-class or type specifiers
e:\dd\my\myview.h(23) : error C2501: 'GetDocument' : missing storage-class or type specifiers
而且错误都指向了MyView.h里面的
CMyDoc* GetDocument();
如果我把MyButton.cpp里的#Include”MyView”去掉,这个错误就没有了,当然就会出现错误
error C2065: 'CMyView' : undeclared identifier
错误指向了MyButton.cpp里的PView = ((CMyView*)GetParent ()
×××××××××××××××××
于是我把变量全放到CMyDoc里面,在CMyView里面使用时想用GetDocument ()来找变量,可是仍然有上述错误(一样的)
××××××××××××××××
请求高手解答

你在MyView.h中加上#include "MyDoc.h"。不行的话在MyView.cpp中加上#include "MyDoc.h"。指向CMyDoc* GetDocument();的错误就没有了~~

你在MyView.h中加上#include "MyDoc.h"
或者加上
class CMyDoc;

于是我就在MyButton.cpp上写了#Include”MyView”,难道是因为你没写.h?????????

这种是重复定义产生的错误,跟窗口句柄什么的没有关系的

简单的举个例子:
A.h 中定义变量int i; 包含头文件B.h
B.h 中包含了A.h
当编译器编译到A的时候就会定义变量i,编译器编译到B的时候又再次定义i,就产生了重复定义的错误。

我也遇到过类似的错误,解决的办法:
1.当要用到某个类的时候,在cpp文件中包含该类的.h文件,而不再.h中包含
2.定义全局变量,用extern声明,避免在两个类之间相互调用

你试试吧,这种问题最终还是要在逻辑上解决的

好兄弟啊,我遇到的也是一样的错误啊
什么需要include的头文件我也都包含了,可还是奇怪的星号前少冒号的语法错误,一点头绪都没有啊

GetParent()这个函数的返回值是HWND窗口句柄,不可以强制转化为(CVIEW*)