Bất cứ khi nào tôi lập cái gì đó # bao gồm một lớp người dùng định nghĩa, tôi nhận được những lỗi biên dịch luôn trông giống như: main.cpp: undefined reference to Complex::Complex(double, double)
lỗi tập tin bao gồm (C++): tài liệu tham khảo không xác định để ______
Tôi đã giảm được vấn đề một thiết lập ba tập tin cực kỳ trần: main.cpp, và ví dụ, Complex.h và Complex.cpp. Tôi vẫn nhận được lỗi tham chiếu không xác định. Tôi đang phát triển trong Code :: Blocks trên Windows nhưng tôi nhận được điều tương tự bằng cách sử dụng g + + trong Ubuntu. Lý do tại sao điều này xảy ra? Tôi đã thử xây dựng Complex.cpp trước main.cpp trong Code :: Blocks, và tôi đã thử g++ main.cpp Complex.cpp
nhiều như tôi đã thử chỉ g++ main.cpp
. Cùng một lỗi mỗi lần.
/*======== main.cpp ========*/
#include "Complex.h"
int main()
{
Complex A(1.0, 1.0);
return 0;
}
/*======== Complex.h ========*/
#ifndef _COMPLEX_H
#define _COMPLEX_H
class Complex
{
public:
double x, y;
Complex(double real, double imag);
};
#endif
/*======== Complex.cpp ========*/
#include "Complex.h"
Complex::Complex(double real, double imag)
{
x = real;
y = imag;
}
ed: bây giờ tôi nhận được các lỗi khác nhau vì vậy tôi phải làm điều gì đó hoàn toàn sai. Sử dụng cùng một mã như trên, tôi nhận được:
main.cpp: in function 'int main()':
main.cpp:5:5: error: 'Complex' was not declared in this scope
main.cpp:5:13: error: expected ';' before 'A'
Điều này thật lạ lùng. Tất cả mọi thứ đã làm việc trước đó khi tôi có lớp trong một tệp .cpp, nhưng đó là "thực hành xấu" vì vậy tôi đã chuyển các định nghĩa lớp của mình thành các tệp .h và lưu giữ tệp .cpp và bây giờ không có gì hoạt động.
Ngoài ra, hãy chắc chắn thêm "-I" vào dòng biên dịch của bạn. Có lẽ ngay cả "-I", nếu các tệp .h của bạn nằm trong cùng một thư mục. – paulsm4
Nó hoạt động cho tôi. Tôi vừa sao chép 'main.cpp',' Complex.h' và 'Complex.cpp', và chạy' g ++ main.cpp Complex.cpp'. Nó tạo ra 'a.out' tốt thôi. – ruakh
Làm việc cho tôi. @ paulsm4: không nên '.' trong đường dẫn mặc định bao gồm? (lưu ý rằng anh ta đang làm '#include" ... "', không phải '#include <...>') –