在下面的程序中,我尝试将一个结构传递给一个函数。 但是我得到的错误,我不明白为什么。 我在这个程序中犯了什么错误?
我使用gcc
来编译这个c
程序。
#include <stdio.h> struct tester { int x; int *ptr; }; void function(tester t); int main() { tester t; tx = 10; t.ptr = & tx; function(t); } void function(tester t) { printf("%d\n%p\n",tx,t.ptr); }
错误:
gcc tester.c -o tester tester.c:8:15: error: unknown type name 'tester' tester.c: In function 'main': tester.c:12:2: error: unknown type name 'tester' tester.c:13:3: error: request for member 'x' in something not a structure or union tester.c:14:3: error: request for member 'ptr' in something not a structure or union tester.c:14:13: error: request for member 'x' in something not a structure or union tester.c: At top level: tester.c:18:15: error: unknown type name 'tester'
注意 :如果我用cout
和stdio
replaceprintf
与iostream
,并将扩展命名为.cpp
(!),则不会出现错误。 这是为什么 ? 难怪我用g++
编译它
如果你不用typedef结构体,你必须在结构体名称前面指定struct,同时声明如下:
struct tester t;
要么你这样做,要么你做下面的事情:
typedef struct { int x; int *ptr; }tester;
更新
下面是从下面的帖子Adam Rosenfield引用C ++中的“struct”和“typedef struct”之间的区别? :
在C ++中,只要名称不被具有相同名称的另一个声明隐藏,所有的struct / union / enum / class声明就像是隐式的typedef处理一样。
你的结构没有被命名。 或者使用struct tester t;
或者是一个typedef
问题在于你想用gcc编译,这是一个“c语言”编译器,而你正在遵循C ++风格的代码。
可以通过structname variablename创建一个结构体变量;
但在c ++中,你明确地告诉编译器它是一个结构
struct structname variablename; 只要做到这一点,你会没事的,否则你可以使用一个typedef,基本上你现在告诉编译器的形式,你将打电话给结构测试人员只有测试人员,这将更适合你,因为你只需要一个小的更改。