首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

100高分悬赏问初级有关问题

2012-03-03 
100高分悬赏问初级问题#include stdio.hvoid main(){StackNode *p}typedef struct StackNode{int i}St

100高分悬赏问初级问题
#include <stdio.h>
void main()
{
StackNode *p;
}
typedef struct StackNode
{
int i;
}StackNode;

StackNode' : undeclared identifier
 : error C2065: 'p' : undeclared identifier
: warning C4552: '*' : operator has no effect; expected operator with side-effect
 : error C2378: 'StackNode' : redefinition; symbol cannot be overloaded with a typedef

编译器VC6.0

[解决办法]
typedef语句放在main前面
[解决办法]
调整顺序试试
[解决办法]

C/C++ code
#include <stdio.h>typedef struct StackNode{int i;}StackNode;void main(){StackNode *p;}
[解决办法]
typedef语句是用来定义新类型的,StackNode是一个新类型,所以应先定义再使用,int,char,float等等这些类型人家已经定义好了,所以可以直接使用,把typedef语句放在main函数前面就可以了
[解决办法]
探讨

#include <stdio.h>
typedef struct StackNode
{
int i;
StackNode *p;
}StackNode;
void main()
{
}//编译OK
#include <stdio.h>
typedef struct
{
int i;
StackNode *p;
}StackNode;
void main()
……

[解决办法]
#include <stdio.h>
typedef struct
{
int i;
StackNode *p;//这里的StackNode可以视为未声明的类型。你要看看你这个类型名称的声明顺序问题。
}StackNode;//到这里才知道StackNode这个类型
void main()
{
}//
[解决办法]
因为你还没定义你就先引用了·
 可以这样:
typedef struct try StackNode;
struct try
{
int i;
StackNode *p;//前面已先定义了,可以使用
};//此处没有

[align=right][/align]
探讨
#include <stdio.h>
typedef struct StackNode
{
int i;
StackNode *p;
}StackNode;
void main()
{
}//编译OK
#include <stdio.h>
typedef struct
{
int i;
StackNode *p;
}StackNode;
void main()
{……

[解决办法]
或者这样:
 typedef struct try //先要有标识符
{
int i;
struct try *p;
}StackNode;

[解决办法]
typedef 放在mian函数的前面
[解决办法]
楼主这个是初级问题了,,一般定义都放在使用的前面的。。。。建议楼主有空去看看编译原理
[解决办法]
探讨
#include <stdio.h>
typedef struct
{
int i;
StackNode *p;//这里的StackNode可以视为未声明的类型。你要看看你这个类型名称的声明顺序问题。
}StackNode;//到这里才知道StackNode这个类型
void main()
{
}//
或者这样:
typedef struct try //先要有标识符
{
int i;
struct try *p;
}StackNode;


[解决办法]
先定义 后使用!
[解决办法]
8.9楼说的不错~~~~~~~~~~~~
[解决办法]
我觉得你定义的结构体要规范,不要乱定义,目的是要让人看懂,而不是求个性。
[解决办法]
探讨
先定义 后使用!

------解决方案--------------------


StackNode的定义在使用它的后面,编译器找不到它。

C/C++ code
typedef struct StackNode
[解决办法]
探讨
#include <stdio.h>
void main()
{
StackNode *p;
}
typedef struct StackNode
{
int i;
}StackNode;

StackNode' : undeclared identifier
: error C2065: 'p' : undeclared identifier
: warning C45……

[解决办法]
1.typedef要先定义 后使用!
2.你typedef新类型的变量StackNode 和结构体变量名一样。。。注意也是不可以的。。会有警告
[解决办法]
肯定是你没有在main前先定义typedef
[解决办法]
#include <stdio.h>

typedef struct StackNode
{
int i;
}StackNode;

void main()
{
StackNode *p;
}

顺序调成这样,其实在编译的时候是从上往下的, 首先遇到了main中的StackNode,但是在这之前StackNode没有定义,所以系统就不认识他,因此会报错StackNode' : undeclared identifier

[解决办法]
typedef定义类型放在main函数前面。使用要先声明,对一般的变量也是这样。
[解决办法]
拜托...
[解决办法]
楼上的都说得很清楚很清楚了哦~

问题一:要先声明后引用。所以typedef要放到main之前。

问题二:在typedef的这个结构体里你用了一个正在定义的StackNode *p,这样肯定报错。解决方法就是
typedef stack a
{
 int i;
 a * p;
}b

不知LZ还有什么困惑呢~
[解决办法]
先定义,后使用。
[解决办法]
楼主的使用习惯不好~要区分清楚使用的时间,定义和引用
[解决办法]


先声明,后使用。


[解决办法]
先定义,后使用
结构体应该放前面
[解决办法]
lz明白乎?
[解决办法]
来接点分吧
[解决办法]
可见域
[解决办法]
顺序执行,没定义,怎么执行
[解决办法]
C:

typedef struct tagNode
{
..;
tagNode *p;
} Node;


C++:
struct Node
{
..;
Node *p;
};
[解决办法]
typedef语句是用来定义新类型的,StackNode是一个新类型,所以应先定义再使用
[解决办法]
顶一个

[解决办法]

#include <stdio.h>
typedef struct StackNode//定义一个结构。并为这个结构起名为StackNode
{
int i;
StackNode *p;//定义一个指向StackNode类型的指针,由于前面已经有了这个StackNode的名字。所以可以编译通过
}StackNode;//将typedef那行中定义的结构StackNode重新命名为StackNode
void main()
{
}//编译OK

//由于一开始定义的名字和最后定义的名字一样。所以在理解上会引起混乱。一般的情况应该这样用:
typedef struct Tmp_StackNode
{
int i;
Tmp_StackNode *p;//定义一个指向Tmp_StackNode类型的指针,由于前面已经有了这个StackNode的名字。所以可以编译通过
}StackNode//将Tmp_StackNode重新命名为StackNode
//这样就好理解了


这样说来。下面那个编译不通过的原因就找到了。
typedef struct //这里没有名称。所以后面定义指向StackNode结构的指针时会报错
{
int i;


StackNode *p;
}StackNode;


建议看下这篇文章
《结构 包含指向 自己的指针》
http://hi.baidu.com/aqiang000000/blog/item/f41ddef8af9ca807d8f9fd57.html

[解决办法]

探讨
typedef语句放在main前面

[解决办法]
在c语言中必须先定义,在使用...
不过在c++中可以边定义边使用,事实上你的结构体也可以写在main()函数的后面,只要在前面声明一下,就o了
如下:
C/C++ code
#include <stdio.h>typedef struct StackNode;void main(){StackNode *p;}typedef struct StackNode{int i;}StackNode;
[解决办法]
先定义,后使用
[解决办法]
先定义,后使用
[解决办法]
如果你想要按这个顺序,要在main()函数里或者前面先声明。
不过一般都是先定义,再使用的。
[解决办法]
#include <stdio.h>
typedef struct StackNode
{
int i;
}StackNode;


void main()
{
StackNode *p;
}
类型定义应该在前面
[解决办法]
唉,C语言都不记得了
[解决办法]
结构体和函数一样,要在使用之前就行声明。
[解决办法]
果然是初级问题
[解决办法]
3楼方法可以
[解决办法]
typedef 放在main函数的前面
[解决办法]
探讨
C/C++ code

#include <stdio.h>

typedef struct StackNode
{
int i;
}StackNode;

void main()
{
StackNode *p;
}

[解决办法]
探讨


[解决办法]
顺序
 回复内容太短了!
[解决办法]
#include <stdio.h>

typedef struct StackNode
{
int i;
}StackNode;

void main()
{
StackNode *p;
}

如果按照原来的写法:

#include <stdio.h>
void main()
{
StackNode *p;
}
typedef struct StackNode
{
int i;
}StackNode;

便一起在编译的时候不知道StackNode是什么,更不知道它会是一个结构体类型。
编译时会报错。原因就在于变量未定义就先应用了。
[解决办法]
先定义,后使用。。。。呵呵
[解决办法]
先定义
[解决办法]
嗯要先定义哈
[解决办法]
先定义....
[解决办法]
我也正在为这个事情犯愁呢
[解决办法]
C语言要记得遵循先声明后使用的规则。。。。
[解决办法]
typedef 放在mian函数的前面
[解决办法]
楼主这样写:
typedef struct tagStackNode


{
int i;
}StackNode;

#include <stdio.h>
void main()
{
StackNode *p;
}

编译器给出的错误已经很明确了:
1.p没有定义。因为编译器在编译的时候还没有看到StackNode结构的定义,所以还不知道。
2.StackNode重定义。按楼主写的就是把自己定义成自己了。编译器认为重定义了。

热点排行