2011-08-04 32 views
8

Tôi đang cố triển khai lớp trong các tệp cpp khác nhau. Tôi hiểu nó là một điều hợp pháp để làm trong C++ nếu các hàm thành viên là độc lập. Tuy nhiên một trong những chức năng thành viên sử dụng chức năng thành viên khác chẳng hạn như trong trường hợp này:Thực hiện lớp trong nhiều tệp

Trong function1.cpp

#include "myclass.h" 
void myclass::function1() 
{ 
    function2(); 
} 

Trong function2.cpp

#include "myclass.h" 
void myclass::function2() 
{ 
.... 
} 

tôi sẽ nhận được một lỗi tham chiếu không xác định để function2. Nó không hoạt động bằng cách thêm con trỏ này. Tôi có cần khai báo nó theo cách nào đó trong hàm1.cpp không? Cảm ơn ~

Tệp tiêu đề bao gồm khai báo cả hai hàm. Nó hoạt động khi hàm 1 và hàm 2 nằm trong cùng một tệp nhưng không phải khi tôi tách chúng. Tôi cũng tin rằng tôi đã thêm cả cpp vào dự án. Tôi đang sử dụng Qt creater btw.

+0

bạn đã khai báo cả hàm function1() và hàm2() trong lớp myclass.h chưa? – nobody

+0

Bạn cần có các khai báo hàm của cả hai hàm trong tệp tiêu đề (myclass.h). – Sujoy

+0

Bạn có thể thêm tệp myclass.h của mình không? Có thể một số lỗi với khai báo lớp - vì những tình huống đó là ok, và lỗi không được ở đây – Olympian

Trả lời

11

Miễn là myclass.h chứa định nghĩa của lớp với khai báo của các hàm thành viên, bạn sẽ ổn. Ví dụ:

//MyClass.h 
#ifndef XXXXXXXX 
#define XXXXXXXX 
class MyClass 
{ 
    public: 
    void f1(); 
    void f2(); 
}; 
#endif 

//MyClass1.cpp 
#include "MyClass.h" 
void MyClass::f1() 
{ 
}; 

//MyClass2.cpp 
#include "MyClass.h" 
void MyClass::f2() 
{ 
    f1(); //OK 
} 
+0

hi cảm ơn. Tôi tin rằng đây là những gì tôi đã làm. Tuy nhiên, sẽ không biên dịch. Nó hoạt động tốt khi hai hàm nằm trong cùng một tệp. Tôi đang làm việc với Qt và cả hai tập tin được liệt kê trong dự án. – Bill

1

Điều này sẽ hiệu quả. Nếu bạn gặp lỗi liên kết, hãy đảm bảo bạn biên dịch cả tệp cpp của mình, đó là điều có thể gây ra lỗi của bạn.

0

Mọi thứ có vẻ ổn với tôi. Có thể có điều gì đó sai với quy trình xây dựng của bạn. Bạn nên biên dịch hai tệp .cpp (sử dụng tùy chọn -c) thành tệp đối tượng và liên kết chúng với nhau trong giai đoạn tiếp theo.

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