2012-01-10 36 views
10

Đây là chương trình C của tôi ...C - Lỗi: kích thước lưu trữ của 'a' không biết

#include <stdio.h> 

struct xyx { 
    int x; 
    int y; 
    char c; 
    char str[20]; 
    int arr[2]; 
}; 

int main(void) 
{ 
    struct xyz a; 
    a.x = 100; 
    printf("%d\n", a.x); 
    return 0; 
} 

Đây là lỗi mà tôi nhận được ....

Nhấn ENTER hoặc gõ lệnh để tiếp tục

 
13structtest.c: In function ‘main’: 
13structtest.c:13:13: error: storage size of ‘a’ isn’t known 
13structtest.c:13:13: warning: unused variable ‘a’ [-Wunused-variable] 
+18

Khi bạn chọn tên kiểu khó hiểu, đó là eztra khó để đánh vần chúng ngay ... –

+2

Thay vì GCC lỗi khá khó hiểu cho, tôi thích MSVC của: ' lỗi C2079: 'a' sử dụng cấu trúc undefined struct 'xyz'' –

+1

cảm thấy như một thằng ngốc !! thanks :) – user361697

Trả lời

19

struct của bạn được gọi là struct xyx nhưng a là loại struct xyz. Once you fix that, the output is 100.

#include <stdio.h> 

struct xyx { 
    int x; 
    int y; 
    char c; 
    char str[20]; 
    int arr[2]; 
}; 

int main(void) 
{ 
    struct xyx a; 
    a.x = 100; 
    printf("%d\n", a.x); 
    return 0; 
} 
4

Giả sử nó như thế này: struct xyx a;

3

Bạn định nghĩa struct của bạn như xyx, tuy nhiên trong chính bạn, bạn sử dụng struct xyz a; , mà chỉ tạo ra một bản tuyên bố về phía trước của một struct khác nhau được đặt tên.

Thử sử dụng xyx a; thay vì dòng đó.

+1

Không thể tạo khai báo chuyển tiếp; nó sẽ thành công với 'struct xyz * pa;', nhưng vì nó là, nó thất bại vì kích thước của 'a' (còn gọi là' struct xyz') là không xác định. –

+0

Ah vâng, cảm ơn. – Matthew

4

bạn xác định cấu trúc là xyx nhưng bạn đang cố gắng tạo cấu trúc được gọi là xyz.

3

đúng typo của

struct xyz a; 

để

struct xyx a; 

Better bạn có thể thử typedef, dễ b

2

Để bất cứ ai với ai là có vấn đề này, nó là một lỗi đánh máy sai. Kiểm tra chính tả của bạn về cấu trúc delcerations và cấu trúc của bạn

1

Trong trường hợp này người dùng đã làm sai trong định nghĩa và cách sử dụng của nó. Nếu ai đó đã thực hiện một typedef đến cấu trúc giống nhau nên được sử dụng mà không sử dụng struct sau đây là ví dụ.

typedef struct 
{ 
    int a; 
}studyT; 

Khi sử dụng trong một hàm

int main() 
{ 
    struct studyT study; // This will give above error. 
    studyT stud; // This will eliminate the above error. 
    return 0; 
} 
Các vấn đề liên quan