error C2037: left of 'i' specifies undefined struct/union 'st'

时间:2022-09-05 15:21:36
编译器VC6
头文件"ts.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct st *test;
typedef char *string;

int Init(test mytest);
实现文件"ts.c"
#include "ts.h"

struct st
{
int i;
};

int Init(test mytest)
{
mytest->i = 0;
return (mytest->i);
}
主文件"main.c"
#include "ts.h"

void main ()
{
test t1;
int j;
t1 = (test)malloc(10);
j = t1->i;
printf("%d\n",j);
}

编译出错:
Compiling...
main.c
E:\Test\TestStruct\main.c(10) : error C2037: left of 'i' specifies undefined struct/union 'st'
Error executing cl.exe.

如果使用Init()函数,可以访问t1->i.
为什么不能直接对t1->i赋值????

8 个解决方案

#1


MSDN里说明C2037:
The expression to the left of a member-selection operator ( -> or . ) specifies an undefined structure or union.

大概意思是左边不是一个已定义的结构体

#2


struct   st
{
int   i;
}; 
放到ts.h的 typedef struct   st   *test; 上面

#3


t1 = (test)malloc(10);

这句代码是干吗用的?你想它做什么?

#4


t1   =   (test)malloc(10); 
这句是动态分配内存啊。

to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?

我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??

另外,用上面的方法,在另一个程序里面,编译出了100多个错误。

#5


问题表述的不够清楚,重说一下

我的意图是想实现“抽象数据类型”的实现细节隐藏

C语言中提供一种“不透明类型”---不完全类型。

但是为什么编译会通不过呢??

#6


没人回答了吗?算了,结贴

#7


我也遇到同样的问题,你可以看下我的文章:
http://blog.csdn.net/cn_lgz/archive/2011/04/25/6362477.aspx
希望对你有帮助。

#8


遇到同样的问题,来看看············

#1


MSDN里说明C2037:
The expression to the left of a member-selection operator ( -> or . ) specifies an undefined structure or union.

大概意思是左边不是一个已定义的结构体

#2


struct   st
{
int   i;
}; 
放到ts.h的 typedef struct   st   *test; 上面

#3


t1 = (test)malloc(10);

这句代码是干吗用的?你想它做什么?

#4


t1   =   (test)malloc(10); 
这句是动态分配内存啊。

to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?

我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??

另外,用上面的方法,在另一个程序里面,编译出了100多个错误。

#5


问题表述的不够清楚,重说一下

我的意图是想实现“抽象数据类型”的实现细节隐藏

C语言中提供一种“不透明类型”---不完全类型。

但是为什么编译会通不过呢??

#6


没人回答了吗?算了,结贴

#7


我也遇到同样的问题,你可以看下我的文章:
http://blog.csdn.net/cn_lgz/archive/2011/04/25/6362477.aspx
希望对你有帮助。

#8


遇到同样的问题,来看看············