gpt4 book ai didi

c++ - MSVC 中的不透明指针生成编译器错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:01 24 4
gpt4 key购买 nike

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;

最佳答案

问题在于:

typedef struct stack_gt* stack_gt;

你正在给 stack_gt 一个不同的类型,而这工作正常:

typedef struct stack_gt* stack_gtB;

clang 给了我们更好的错误信息:

error: typedef redefinition with different types ('struct stack_gt *' vs 'stack_gt')

C++ 标准草案 7.1.3 The typedef specifier paragraph 6 中涵盖了这一点:

In a given scope, a typedef specifier shall not be used to redefine the name of any type declared in that scope to refer to a different type. [ Example:

class complex { / ... / };
typedef int complex; // error: redefinition

—end example ]

虽然使用相同的名称没问题,但这样也可以:

   typedef struct stack_gt stack_gt;

3 段中包含:

In a given non-class scope, a typedef specifier can be used to redefine the name of any type declared in that scope to refer to the type to which it already refers. [ Example:

typedef struct s { / ... / } s;
typedef int I;
typedef int I;
typedef I I;

—end example ]

关于c++ - MSVC 中的不透明指针生成编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com