0

C++プログラムのメイン関数でacヘッダーで定義された列挙を使用するのに問題があります。コードは次のようになります。

main.cpp:

extern "C"
{
#include my_c_header.h
}
//...
int main(void)
{
  my_c_function(channel_1);
  return 0;
}

my_c_header.h:

typedef enum channel
{
  channel_0,
  channel_1
};

void my_c_function(channel ch)
{
  //...
}

コンパイラは、シンボル'channel_1'を解決できないと文句を言っています。コンパイラはtms470ですが、問題がこのコンパイラに固有のものなのか、cとc++のこの混合に何か問題があるのか​​はわかりません。

4

2 に答える 2

6

それは有効なtypedefステートメントではありません。エイリアス名がありません。

試す

typedef enum
{
  channel_0,
  channel_1
} channel;

(実際には合法かもしれませんがchannel、C コンパイラが使用する検索空間にその名前を導入することはありません。)

于 2012-04-24T21:54:03.090 に答える
0

ヘッダーファイルではなく、ソース内で列挙型を定義したと思います。

于 2012-04-24T21:54:44.170 に答える