2

main.c

#include "stackg.h"

int main()
{
    return 0;
}

stackg.h

#ifndef STACKG_H
#define STACKG_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct stack_gt* stack_gt;

stack_gt stkg_init(
                  void* (*alloc)(const void* data, const int size),
                  void (*dealloc)(void* data),
                  void (*copy)(void* data_d, const void* data_s),
                  const int size
                  );
void stkg_free(stack_gt s);
int stkg_is_empty(stack_gt s);
int stkg_is_full(stack_gt s);
const int stkg_size(const stack_gt s);
void stkg_clear(stack_gt s);
int stkg_push(stack_gt s, const void* data);
int stkg_pop(stack_gt s, void* data);
int stkg_peek(stack_gt s, void* data);

#ifdef __cplusplus
}
#endif

#endif

上記のプログラムは GCC コンパイラで正常にコンパイルされますが、MSVC2008 では次のエラーが発生します。

error C2040: 'stack_gt *' differs in levels of indirection from 'stack_gt'

コードを何も変更せずにプログラムをコンパイルするには、MSVC に何を指示すればよいですか?

編集

stackg.h::の 8 行目でエラーが発生しますtypedef struct stack_gt* stack_gt;

編集 2

他に何もないなら、私は一緒に行きますtypedef struct _stack_gt* stack_gt;

4

2 に答える 2

1

別のアイデア:

 #ifdef __cplusplus

 extern "C" {
 typedef void * stack_gt

 #else

 typedef struct stack_gt* stack_gt;

 #endif

これは醜いですが、コードの他の部分を書き直す必要はありませんC++C++とにかく不透明なポインターとしてのみ使用され、C気付かれません。

于 2014-03-30T03:51:16.187 に答える