0

gcc を使用してコンパイルすると正常に動作する関数がありますが、g++ でコンパイルすると、次のエラーが発生します。

bon_io.cpp:関数 'lruc_item* lruc_pop_or_create_item(lruc*)': bon_io.cpp:4751: エラー: 'void*' から 'lruc_item*' への無効な変換</p>

コード:

typedef struct {
void      *value;
void      *key;
uint32_t  value_length;
uint32_t  key_length;
uint64_t  access_count;
void      *next;
} lruc_item;


lruc_item* lruc_pop_or_create_item(lruc *cache1) 
{
  lruc_item *item = NULL;

  if(cache1->free_items) {
  item = cache1->free_items;
  cache1->free_items = item->next;                     [LINE 4751]
   } else {
  item = (lruc_item *) calloc(sizeof(lruc_item), 1);
   }

  return item;
}

この関数を C++ コードで使用しようとしています。そのため、g++ でコンパイルする必要があります。gcc を使用してコンパイルしても、g++ ではコンパイルしないと正常に動作します。

g++ でこれを機能させる方法を教えてください。

ありがとう

4

1 に答える 1

2

どうですか:

cache1->free_items = (lruc_item *) item->next;

しかし、gccを使用して完全にコンパイルされ、g ++でエラーが発生するのはなぜですか

void *C++ では、別のポインター型に自動的に変換できないためです。

于 2012-08-07T14:28:29.027 に答える