cuốn sách gpt4 ai đã làm

Không thể chuyển các biến thuộc loại (không chuẩn) của riêng tôi sang hàm

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:27:48 26 4
mua khóa gpt4 Nike

Tôi đang viết một chương trình phải chuẩn hóa âm thanh *.wav tài liệu. Có một nhiệm vụ "hiển thị dữ liệu tiêu đề":ChunkId,Kích thước đoạn 等等。

Tôi muốn tạo một tập tin có tênhiển thị_hdr (để rút gọn code trong file main.c để đọc code này sẽ dễ dàng hơn). Để làm điều này, tôi phải chuyển biến tiêu đề (một biến kiểu header ) làm tham số cho hàm này, nhưng nó được viết là

Hàm.h|1|lỗi: tên loại không xác định 'tiêu đề'|

chính.c:

cấu trúc typedef FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
int ngắn AudioFormat;
int ngắn NumChannels;
int SampleRate;
int ByteRate;
int ngắn BlockAlign;
int ngắn BitsPerSample;
} fmt;

cấu trúc typedef DỮ LIỆU
{
char Subchunk2ID[4];
int Subchunk2Size;
Dữ liệu int[];
} dữ liệu;

TIÊU ĐỀ cấu trúc typedef
{
char ChunkID[4];
int ChunkSize;
Định dạng char[4];
fmt S1;
dữ liệu S2;
} tiêu đề;

Biến Header được khai báo như sau:

tiêu đề hdr;

现在,Khi tôi cố gắng đặt hdr Khi được chuyển đến chức năng của tôi, nó in ra mộtsai lầm:

Hàm.h|1|lỗi: tên loại không xác định 'tiêu đề'|

hàm.h

void display_hdr(tiêu đề hdr)
{
printf("\n************************************\n");
printf("Siêu dữ liệu của tập tin WAVE:\n\n");

printf("%4.4s\n", hdr.ChunkID );
printf("%d\n", hdr.ChunkSize );
printf("%4.4s\n", hdr.Format );

printf("%4.4s\n", hdr.S1.SubChunk1ID );
printf("%d\n", hdr.S1.SubChunk1Size );
printf("%d\n", hdr.S1.AudioFormat );
printf("%d\n", hdr.S1.NumChannels );
printf("%d\n", hdr.S1.SampleRate );
printf("%d\n", hdr.S1.ByteRate );
printf("%d\n", hdr.S1.BlockAlign );
printf("%d\n", hdr.S1.BitsPerSample );

printf("%4.4s\n", hdr.S2.Subchunk2ID );
printf("%d\n", hdr.S2.Subchunk2Size ); /// KÍCH THƯỚC MẪU
printf("\n************************************\n");
return;
}

Vì vậy, làm cách nào để bạn chuyển một biến thuộc loại (không chuẩn) của riêng bạn làm tham số cho hàm?

câu trả lời hay nhất

"Phạm vi của các biến toàn cục có thể bị hạn chế bằng cách sắp xếp các khai báo cẩn thận. Chúng hiển thị từ phần khai báo đến cuối tệp nguồn hiện tại."

Hiện tại không có vấn đề gì với chủ đề này (không có cảnh báo hoặc lỗi). Tôi vừa chuyển định nghĩa của struct (loại) từ main.c sang function.c (nơi nó được khai báo hdr loại biến tiêu đề).

hàm.h

cấu trúc typedef FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
int ngắn AudioFormat;
int ngắn NumChannels;
int SampleRate;
int ByteRate;
int ngắn BlockAlign;
int ngắn BitsPerSample;
} fmt;

cấu trúc typedef DỮ LIỆU
{
char Subchunk2ID[4];
int Subchunk2Size;
Dữ liệu int[];
} dữ liệu;

TIÊU ĐỀ cấu trúc typedef
{
char ChunkID[4];
int ChunkSize;
Định dạng char[4];
fmt S1;
dữ liệu S2;
} tiêu đề; /* Đã tạo một loại `tiêu đề` */

header hdr; /* Sau khi loại `header` được tạo.

void display_hdr(tiêu đề hdr)
{
printf("\n************************************\n");
printf("Siêu dữ liệu của tập tin WAVE:\n\n");

printf("%4.4s\n", hdr.ChunkID );
printf("%d\n", hdr.ChunkSize );
printf("%4.4s\n", hdr.Format );

printf("%4.4s\n", hdr.S1.SubChunk1ID );
printf("%d\n", hdr.S1.SubChunk1Size );
printf("%d\n", hdr.S1.AudioFormat );
printf("%d\n", hdr.S1.NumChannels );
printf("%d\n", hdr.S1.SampleRate );
printf("%d\n", hdr.S1.ByteRate );
printf("%d\n", hdr.S1.BlockAlign );
printf("%d\n", hdr.S1.BitsPerSample );

printf("%4.4s\n", hdr.S2.Subchunk2ID );
printf("%d\n", hdr.S2.Subchunk2Size ); /// KÍCH THƯỚC MẪU
printf("\n************************************\n");
return;
}

tái bút

Tất nhiên tôi có thể truyền con trỏ tới một hàm, nhưng tôi muốn truyền biến. Không cần phải làm điều này vì nghĩ nó tốt hơn (tiết kiệm bộ nhớ).

Câu hỏi này là dohiểu lầm (hiểu kém/hiểu kém)'phạm vi' Đúng.

PSS

Có lẽ,Andrew W Điều đó đúng ở một khía cạnh nào đó, nhưng nó không giải quyết được vấn đề trước mắt. Đó là một loại vấn đề khác. Nhưng nó cũng đáng đọc!

Về việc không thể chuyển các biến thuộc loại (không chuẩn) của riêng tôi sang một hàm, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/16627666/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress