我正试图修改一个用旧版本的Visual Studio编写的项目。我现在使用Visual Studio 2010。当我打开项目时,它被自动转换为2010格式。然而,当我构建它时,我会得到以下错误:
错误1错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\x\dcd\dcdchild.h 22 1
有问题的文件很小:
// dcdchild.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CDCDChildWnd frame
class CDCDChildWnd : public CMDIChildWnd
{
DECLARE_DYNCREATE(CDCDChildWnd)
protected:
CDCDChildWnd(); // protected constructor used by dynamic creation
// Attributes
public:
// Operations
public:
// Implementation
protected:
virtual ~CDCDChildWnd();
virtual CDCDChildWnd::PreCreateWindow(CREATESTRUCT& cs);
// Generated message map functions
//{{AFX_MSG(CDCDChildWnd)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
有问题的线路是:
virtual CDCDChildWnd::PreCreateWindow(CREATESTRUCT& cs);
我查阅了CREATESTRUCT的定义,它是:
typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
所以它确实包括变量类型int。问题是,我该如何解决它?
声明virtual CDCDChildWnd::PreCreateWindow(CREATESTRUCT& cs);
无效。它应该是这样的:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
您的方法没有声明返回类型:
virtual CDCDChildWnd::PreCreateWindow(CREATESTRUCT& cs);
你的意思可能是:
virtual BOOL CDCDChildWnd::PreCreateWindow(CREATESTRUCT& cs);
(错误消息指的是,在早期版本的C中,您可以省略返回类型,在这种情况下假设为int
,但这在C++中是不允许的。)