在下面的程序中,我尝试将结构传递给函数。但我得到错误,我不明白为什么。我在这个程序中犯了什么错误?
我正在使用gcc
来编译此c
程序。
#include <stdio.h>
struct tester {
int x;
int *ptr;
};
void function(tester t);
int main() {
tester t;
t.x = 10;
t.ptr = & t.x;
function(t);
}
void function(tester t) {
printf("%d\n%p\n",t.x,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’
注意:如果我将printf
替换为cout
,将stdio
替换为iostream
,并将扩展名命名为.cpp
(!),我没有错误。这是为什么 ?难怪我使用g++
答案 0 :(得分:5)
如果你没有键入构造结构,你必须在结构名称前面指定struct,同时声明它:
struct tester t;
要么您这样做,要么执行以下操作:
typedef struct {
int x;
int *ptr;
}tester;
更新
以下是来自以下帖子Difference between 'struct' and 'typedef struct' in C++?的Adam Rosenfield的引用:
在C ++中,所有struct / union / enum / class声明都表现为隐式typedef,只要该名称不被另一个具有相同名称的声明隐藏。
答案 1 :(得分:1)
您的结构未命名。使用struct tester t;
或美国的typedef
答案 2 :(得分:0)
问题是你正在尝试用gcc编译,这是一个“c语言”编译器,你正在遵循C ++风格的代码。
只需 structname variablename;
就可以创建一个struct变量
但是在c ++中,你必须明确地告诉编译器它是一个类似于的结构
struct structname variablename;
只是做到这一点,你会没事的,否则你可以使用一个typedef,基本上你现在告诉编译器表单你将把结构测试器调用到只有测试器,这将更适合你,因为你只需要一个未成年人更改。