3

VS2010(およびVS2008)で問題が発生し、構文エラーの素晴らしいリストが表示されます。ただし、構文は確かに正しいです。これが小さな例です。

.hファイル内に次のコードブロックがあります

// Prototype Declarations
LIST*   createList     (int (*compare) (void*, void*));
LIST*   destroyList    (LIST* plist);
int     addNode      (LIST* pList, void* dataInPtr);
bool    removeNode      (LIST* pList, void* keyPtr, void** dataOutPtr);
bool    searchList      (LIST* pList, void* pArgu, void** pDataOut);
bool    retrieveNode    (LIST* pList, void* pArgu, void** dataOutPtr);
bool    traverse        (LIST* pList, int fromWhere, void** dataOutPtr);
int     listCount    (LIST* pList);
bool    isListEmpty     (LIST* pList);
bool    isListFull      (LIST* pList);

LISTはtypedefされた構造体、FYIです。これらの関数宣言はすべて正しい構文のようです。それでも、ビルドしようとすると、最初のbool関数から始まり、リストを下に向かって、次の構文エラーが発生します。

エラー2エラーC2059:構文エラー:';'

問題がどこにあるのかわかりません。繰り返しますが、これはほんの小さな例です。また、次のような構文エラーが発生します

bool found;

エラー29エラーC2065:'bool':宣言されていない識別子

私は本当にこれに迷っています。ここに投稿されたコードは私自身のものではなく、データ構造の本からのものですが、やはり正しいように見えます。どんな助けでもいただければ幸いです。ありがとう!

4

2 に答える 2

9

boolは C の基本型ではありません。

Visual C++ は型を持たない C90 のみを実装しboolます。C99はヘッダーbool経由のサポートを追加しまし<stdbool.h>たが、Visual C++ はこれをサポートしていません。

int独自の typedef を使用するか作成する必要がありますbool

于 2011-04-15T00:52:10.087 に答える
1

そのヘッダーを含むファイルのファイル拡張子を確認してください。

Visual Studio は、(プロジェクト設定で) 別の方法で実行するように指示しない場合、.c ファイルを C++ ではなく C として自動的にコンパイルします。

Visual Studio の「C」サポートは...興味深いです。私の理解では、実際には C99 ではなく C89 であり、スイッチをフリックするだけで C99 を取得することはできません。C89/C99 はさておき、bool は C の組み込み型ではありません。

すべてのファイルの名前を .cpp に変更して C++ としてコンパイルするか、プロジェクト設定を変更して、プロジェクト内のすべての .c/.cpp/.cc ファイルに対して強制的に C++ としてコンパイルすることができます。

于 2011-04-15T00:52:22.780 に答える