2013-07-09 44 views
8

Giả sử tôi có hàm này được gọi là DoThis (const char * abc) trong một tệp có tên là one.cpp. Vì vậy, khi tôi cố gắng gọi hàm này từ một hàm khác trong một tệp nguồn khác (hai.cpp), tôi nhận được lỗi: lỗi LNK2001: biểu tượng bên ngoài chưa được giải quyết (C++), mặc dù tôi đã sử dụng #include "one.h" Tôi làm gì để sửa lỗi này?lỗi LNK2001: biểu tượng bên ngoài chưa được giải quyết (C++)

+0

Nó cũng được xác định trong một.h – Enigma

+0

Hàm DoThis được xác định trong tiêu đề. – user2549990

+0

là cả hai tệp được liên kết với dự án? – Enigma

Trả lời

11

Điều đó có nghĩa là định nghĩa chức năng của bạn không có trong chương trình của bạn. Bạn đã quên thêm one.cpp vào chương trình của mình.

Điều "thêm" có nghĩa là trong trường hợp này phụ thuộc vào môi trường xây dựng và thuật ngữ của nó. Trong MSVC (vì bạn đang sử dụng MSVC), bạn phải thêm one.cpp vào dự án.

Trong điều kiện thực tế hơn, áp dụng cho tất cả các phương pháp xây dựng điển hình, khi bạn liên kết chương trình của bạn, tệp đối tượng đã tạo biểu mẫu one.cpp bị thiếu.

+0

Nhưng điều gì sẽ xảy ra nếu tệp của tôi là tệp chỉ tiêu đề gây ra một lớp trừu tượng? Xin lỗi để đào lên bài cũ :) –

+0

@Niklas Vest: Nếu mọi thứ đều có, trong tiêu đề, sau đó trình biên dịch/linker sẽ có thể tìm thấy mọi thứ mà không có bất kỳ vấn đề. I E. LNK2001 đơn giản sẽ không xảy ra. Đặt những thứ không phù hợp vào các tập tin tiêu đề thường làm tăng nguy cơ LNK2005, mà là ở đầu kia của quang phổ: quá nhiều định nghĩa. – AnT

3

Có vẻ như bạn đang sử dụng Microsoft Visual C++. Nếu đó là trường hợp, thì khả năng nhất là bạn không biên dịch hai.cpp của bạn với one.cpp (one.cpp là việc thực hiện một .h).

Nếu bạn đến từ dòng lệnh (cmd.exe), sau đó thử này đầu tiên: cl -o two.exe one.cpp two.cpp

Nếu bạn đến từ IDE, nhấp chuột phải vào tên dự án từ Solution Explore. Sau đó, chọn Thêm, Mục Hiện tại .... Thêm một .pp vào dự án của bạn.

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