2012-06-30 41 views
9

Tôi đang gặp một số sự cố khi biên soạn một vài tệp bằng tiêu đề. Dưới đây là một phân tích về mã của tôi:Lỗi "Tham chiếu đến hàm" không được xác định

file1.c

#include "header.h" 
int main() { 
    func1(); 
    return 0; 
} 

file2.c

#include "header.h" 
void func1() { 
    ... function implementation ... 
} 

header.h

void func1(); 


Các lỗi tôi nhận được là:

Trong chức năng 'main':
tài liệu tham khảo không xác định để 'func1'

Lưu ý: Tôi chỉ sử dụng một sự cố đơn giản về cách 3 tác phẩm của tôi được thiết lập. Tôi cần phải làm điều này để làm việc với 3 tập tin. Tôi đang thiết lập/bao gồm tất cả mọi thứ đúng cách? Tôi cần phải sử dụng thiết lập này, nhưng tôi chỉ không chắc chắn như thế nào file.c được tham chiếu đến việc thực hiện thực sự của func1().

+2

trình biên dịch bạn đang sử dụng là gì ?? bạn có thể cung cấp câu lệnh trình biên dịch của bạn không? – mathematician1975

+3

Nếu bạn đang sử dụng 'gcc -o program file2.c file1.c', hãy thay đổi thành' gcc -o program file1.c file2.c'. Đặt hàng là quan trọng. –

+0

Hmm, quyền của bạn là điều này sẽ hoạt động trong quá trình biên dịch gcc thông thường. Vấn đề là, vấn đề này cho nhiều hơn là từ một dự án rất lớn, với hàng trăm tập tin. Nhưng cấu trúc của vấn đề là như nhau. Tôi chỉ nghĩ có lẽ tôi đã không bao gồm những thứ đúng cách, nhưng tôi đoán đó không phải là trường hợp. – Tesla

Trả lời

4

Nếu lỗi là một tài liệu tham khảo không xác định để func1(), và không có lỗi khác, sau đó tôi sẽ nghĩ đó là vì bạn có hai tập tin gọi là header.h trong dự án của bạn và các bản sao khác đã được bao gồm thay vì bản sao của bạn với tờ khai của func1().

Tôi sẽ kiểm tra đường dẫn bao gồm cho dự án của bạn và đảm bảo rằng header.h với tuyên bố của bạn là func1() đang được bao gồm trước.

+0

Đây là soooooo cũ, nhưng tôi đang chạy vào vấn đề này và tôi sẽ đánh giá cao sự giúp đỡ. Các thiết lập cơ bản là giống như câu hỏi này, ngoại trừ tôi chắc chắn rằng tiêu đề chính xác đang được bao gồm, bởi vì một số chức năng không cung cấp cho tài liệu tham khảo undefined và một số làm. Nó chỉ là lạ, và nếu tôi gây nguy hiểm cho tiêu đề thì mã "chính xác" không biên dịch. –

Các vấn đề liên quan