12

そのため、継承したコードに問題があります。このコードは、C のみの環境で正常にビルドされていましたが、C++ を使用してこのコードを呼び出す必要があります。ヘッダーproblem.hには次が含まれます。

#ifndef _BOOL
typedef unsigned char bool;
static const bool False = 0;
static const bool True = 1;
#endif

struct astruct
{
  bool myvar;
  /* and a bunch more */
}

C++ コードとしてコンパイルすると、error C2632: 'char' followed by 'bool' is illegal

#include "problem.h"inをラップすると同じエラーが発生します ( C としてコンパイルするときにextern "C" { ... }キーワードがないはずなので、わかりませんか?)bool

からブロックを削除し、C++ としてコンパイルしようとし#ifndef _BOOLまし#endifたが、エラーが発生しました。

error C2061: C requires that a struct or union has at least one member
error C2061: syntax error: identifier 'bool'

C++ コンパイラが の再定義について不平を言う方法を理解していませんが、再bool定義を削除してbool変数を定義するために使用しようとすると、何も見つかりません。

どんな助けでも大歓迎です。

4

4 に答える 4

20

boolは C++ の基本型 (C ではなく) であり、再定義できないためです。

コードを次のように囲むことができます

#ifndef __cplusplus
typedef unsigned char bool;
static const bool False = 0;
static const bool True = 1;
#endif
于 2012-05-17T12:56:05.153 に答える
7

C99 を使用できますbool

#ifndef __cplusplus
#include <stdbool.h>
#endif

bool myBoolean; // bool is declared as either C99's _Bool, or C++'s bool data type.

なぜこれを使用する必要があるのですか?

他の C99 コードとの互換性のため。_Boolは C99 コードで一般的に使用されており、非常に便利です。また、舞台裏で_Boolはコンパイラによって定義されたデータ型であるため、多くのものを型定義する必要なく、ブール型のデータ型を持つことができます。

于 2012-05-17T12:56:53.143 に答える
1

__cplusplus次のマクロを使用する必要があります。

#ifndef __cplusplus
#ifndef _BOOL
typedef unsigned char bool;
static const bool False = 0;
static const bool True = 1;
#endif
#endif 

詳細については、C++ FAQ へのこのリンクを確認してください。

于 2012-05-17T13:01:10.857 に答える