VCにerror C 2143:syntax error:missing';before'*'エラーの解決策
VCプログラミングでは、error C 2143:syntax error:missing';before'*',すなわち「*」号の前に「;」が少なくなった.いったい何が原因なのか.
背景: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クラスのソースファイルを見てみましょう.次は彼女が始めたいくつかの文です.
見ることができますcppファイルはsplitterViewを含む.hファイルの前にsplitterDocが含まれている.hクラスファイルの内容で、このファイルにはsplitterDocクラスが定義されています.それからsplitterViewを展開します.hファイル、これはコンパイラがsplitterDocクラスの定義を知っていることです.実際には、上記のエラーを解決するために、コンパイラがsplitterViewクラス定義を参照する前にsplitterDocクラスの定義を知っておく必要があります.したがって、ここで発生する問題を解決するために、ビュークラスソースファイルに含まれるドキュメントクラスの定義文をビュークラスのヘッダファイルに移動し、ビュークラス定義の前に配置することができます.すなわちsplitterViewを切り取る.cppの"#include"splitterDoc.h"は、この行の文をsplitterViewに貼り付けます.hファイルの前部.以下は修正後のsplitterView.hファイルの前部コード.
再コンパイル、OK!この時プログラムは順調に通過し,問題は解決した.
オリジナルの文章は転載するならば、明記してください:Outshineの個人のウェブサイトから転載します-http://www.seuoutshine.com/リンク先:http://www.seuoutshine.com/reed/VCZhongChuXianerror-C2143-syntax-error-missing-before-CuoWuDeJieJueFangAn.html
背景: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"
見ることができます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 only
CSplitterView();
DECLARE_DYNCREATE(CSplitterView)
再コンパイル、OK!この時プログラムは順調に通過し,問題は解決した.
オリジナルの文章は転載するならば、明記してください:Outshineの個人のウェブサイトから転載します-http://www.seuoutshine.com/リンク先:http://www.seuoutshine.com/reed/VCZhongChuXianerror-C2143-syntax-error-missing-before-CuoWuDeJieJueFangAn.html