6
struct mystruct
{
    int   i;
    double f;
} ;

typedef mystruct myotherstruct;

//the other .cpp file
struct mystruct;  //OK,this is a correct forward declaration.
struct myotherstruct; // error C2371(in vc2k8): 'myotherstruct' : redefinition; different basic types

大家好。为什么我不能转发声明 myotherstruct?

4

2 回答 2

1

typedefs如果没有类型定义的前向声明,则不能前向声明struct。你应该先转发声明struct然后typedef

struct mystruct;
typedef mystruct myotherstruct;
于 2012-07-19T10:44:59.000 回答
1

myotherstruct标识符不是struct标签,它本身就是一个类型名称。您在没有struct关键字的情况下使用它。一旦定义,名称就不能再用于struct标签。在您的示例中,您不是前向声明myotherstruct类型,而是struct使用标签前向声明 a myotherstruct,这会给您一个错误,因为该名称myotherstruct已被typedef.

于 2012-07-19T10:45:41.967 回答