头文件"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.
大概意思是左边不是一个已定义的结构体
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; 上面
{
int i;
};
放到ts.h的 typedef struct st *test; 上面
#3
t1 = (test)malloc(10);
这句代码是干吗用的?你想它做什么?
这句代码是干吗用的?你想它做什么?
#4
t1 = (test)malloc(10);
这句是动态分配内存啊。
to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?
我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??
另外,用上面的方法,在另一个程序里面,编译出了100多个错误。
这句是动态分配内存啊。
to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?
我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??
另外,用上面的方法,在另一个程序里面,编译出了100多个错误。
#5
问题表述的不够清楚,重说一下
我的意图是想实现“抽象数据类型”的实现细节隐藏
C语言中提供一种“不透明类型”---不完全类型。
但是为什么编译会通不过呢??
我的意图是想实现“抽象数据类型”的实现细节隐藏
C语言中提供一种“不透明类型”---不完全类型。
但是为什么编译会通不过呢??
#6
没人回答了吗?算了,结贴
#7
我也遇到同样的问题,你可以看下我的文章:
http://blog.csdn.net/cn_lgz/archive/2011/04/25/6362477.aspx
希望对你有帮助。
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.
大概意思是左边不是一个已定义的结构体
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; 上面
{
int i;
};
放到ts.h的 typedef struct st *test; 上面
#3
t1 = (test)malloc(10);
这句代码是干吗用的?你想它做什么?
这句代码是干吗用的?你想它做什么?
#4
t1 = (test)malloc(10);
这句是动态分配内存啊。
to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?
我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??
另外,用上面的方法,在另一个程序里面,编译出了100多个错误。
这句是动态分配内存啊。
to: akirya 哥们
你那个方法我试过了,可以通过
但现在的问题是,现在的这种组织方法有什么问题吗?
我想在头文件里声明一个新类型
然后在实现文件里面定义。这样做不可以吗??
另外,用上面的方法,在另一个程序里面,编译出了100多个错误。
#5
问题表述的不够清楚,重说一下
我的意图是想实现“抽象数据类型”的实现细节隐藏
C语言中提供一种“不透明类型”---不完全类型。
但是为什么编译会通不过呢??
我的意图是想实现“抽象数据类型”的实现细节隐藏
C语言中提供一种“不透明类型”---不完全类型。
但是为什么编译会通不过呢??
#6
没人回答了吗?算了,结贴
#7
我也遇到同样的问题,你可以看下我的文章:
http://blog.csdn.net/cn_lgz/archive/2011/04/25/6362477.aspx
希望对你有帮助。
http://blog.csdn.net/cn_lgz/archive/2011/04/25/6362477.aspx
希望对你有帮助。
#8
遇到同样的问题,来看看············