在下面的程序中,我嘗試將結構傳遞給函數。但我得到錯誤,我不明白爲什麼。我在這個計劃中犯了什麼錯誤?嘗試將結構傳遞給函數時出錯
我正在使用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++
關於您的編輯:如果文件擴展名爲「cpp」,gcc會將您的文件編譯爲C++代碼。請參閱http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b和http://stackoverflow.com/questions/5853664/whats-the-difference-between-gcc-and-g -gcc -c – halex
關於「轉換」到C++,你會得到不同的結果,因爲C!= C++。在C'struct blah {}'中不會創建一個新類型,但是在C++中它確實(非常寬泛地說)。 – twalberg