error C2143: syntax error : missing ';' before '*'
来源:互联网 发布:电信运营商网络架构 编辑:程序博客网 时间:2024/05/17 23:09
背景:当在MainFrame类中包含CView.h文件时会出现编译错误。
下面我们首先看看编译器的错误提示信息:
--------------------Configuration: splitter - Win32 Debug--------------------
Compiling...
MainFrm.cpp
f:\c++pratice\vc\test\splitter\splitterview.h(21) : error C2143: syntax error : missing ';' before '*'
f:\c++pratice\vc\test\splitter\splitterview.h(21) : error C2501: 'CSplitterDoc' : missing storage-class or type specifiers
f:\c++pratice\vc\test\splitter\splitterview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
Error executing cl.exe.
splitter.exe - 3 error(s), 0 warning(s)
我们可以在第一条错误提示上双击鼠标左键,VC++将在代码编辑窗口打开CView类头文件,并定位到如图中光标所示位置。
这个错误在程序开发中会经常遇到,实际上,并不是错误信息所说的那样要在*号前加一个分号,而是程序不认识CSplitterDoc这个类。我们知道,C++程序在编译时,只有源文件参与编译,我们在CMainFrame类的源文件前部加入了包含splitterView.h文件的代码#include "splitterView.h",因此,在编译CMainFrame类得源文件时,当遇到这行语句,就会展开splitterView.h文件的内容,但该文件中引用了尚未定义的splitterDoc.h类,因此编译器就会报告上述错误信息。那为什么视类的源文件包含它的头文件,在编译时没有出错呢?可以先看看splitterView类得源文件,下面是她开始的几行语句:
// splitterView.cpp : implementation of the CSplitterView class//#include "stdafx.h"#include "splitter.h"#include "splitterDoc.h"#include "splitterView.h"
可以看到,splitterView.cpp文件在包含splitterView.h文件之前包含了splitterDoc.h类文件的内容,该文件中是splitterDoc类得定义。然后才展开splitterView.h文件,这是编译器知道了splitterDoc类的定义。其实,为了解决上述错误,归根到底就是要让编译器在引用splitterView类定义之前就知道了splitterDoc类的定义。因此,为了解决这里出现的问题,可以把视类源文件中包含文档类的定义语句移到视类的头文件中,并放置在视类定义之前。即剪切splitterView.cpp中的“#include "splitterDoc.h" ”,这行语句,并将其粘贴到splitterView.h文件的前部。以下是修改后的splitterView.h文件的前部代码。
// splitterView.h : interface of the CSplitterView class///////////////////////////////////////////////////////////////////////////////#if !defined(AFX_SPLITTERVIEW_H__540E2E9D_94E3_4728_8C56_A95C12F3ACE2__INCLUDED_)#define AFX_SPLITTERVIEW_H__540E2E9D_94E3_4728_8C56_A95C12F3ACE2__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "splitterDoc.h"class CSplitterView : public CView{protected: // create from serialization onlyCSplitterView();DECLARE_DYNCREATE(CSplitterView)
再次编译,OK!这时程序顺利通过,问题解决了。
- error C2143: syntax error : missing ';' before '*'问题
- error C2143: syntax error : missing ';' before '*....
- error C2143: syntax error : missing ';' before '*.... 解决...
- error C2143: syntax error : missing ')' before '*'
- error C2143: syntax error : missing ';' before '*'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error : missing ';' before '.'
- error C2143: syntax error : missing ';' before '*.... 解决方案
- error C2143: syntax error : missing \';\' before \'type\'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error : missing ';' before '}'
- error C2143:syntax error :missing ‘;’before ‘}’
- error C2143: syntax error : missing ';' before 'namespace'
- error C2143: syntax error : missing ';' before 'type'
- error C2143: syntax error: missing ';' before '__stdcall'
- 巴厘岛旅游
- c++实现一个简易vector加强版
- 自己动手写推箱子游戏——界面(源码)
- 杂项7
- iphone开发 调用相机拍照
- error C2143: syntax error : missing ';' before '*'
- Ubuntu安装配置Mysql
- 急需要解答JSON问题!...很着急,非常急!
- 在centos 6上的helloworld 模块测试
- 设置NTFS的文件/文件夹安全权限
- sphinxSE+mysql部署实现
- OWC详解,以及OWC生成柱图,线图,饼图示例
- hdu 3046
- oracle-xe fedora14安装