2013-04-26 30 views
5

Tôi đi qua this trong khi cố gắng để có được câu trả lời. Nhưng có vẻ như áp phích có nhiều tệp và chúng không bị liên kết và do đó có lỗi.`không xác định tham chiếu đến` main` trong lớp Cpp mà không có chính()

Nhưng, tại sao tôi gặp lỗi này khi sử dụng một tệp?

g++ myClass.cpp 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 

Và tại sao là main cần thiết ở đây tại thời gian biên dịch (từ nơi nào nó tìm thấy một đề cập đến chính trong mã của tôi)? main là điểm bắt đầu thực thi mã, nhưng tại sao trình biên dịch giả sử tôi cần một số main tại đây. Tôi có thể xác định nó trong một số tệp khác và sử dụng gcc -o để thực thi tệp không?

Hoặc có thể tôi thiếu một số thứ khác trong mã gây ra lỗi?

#include<iostream> 
class myClass 
{ 

public: 
myClass() 
{ 
    std::cout<<"Constructor"; 
} 

~myClass() 
{ 
    std::cout<<"Destructor";  
} 

}; 

Trả lời

5

main không cần thiết để biên dịch tệp nguồn. Nó là cần thiết để liên kết một chương trình thành một thực thi [1], bởi vì chương trình phải bắt đầu ở đâu đó.

Bạn cần phải nói với trình biên dịch rằng "đây không phải là toàn bộ chương trình của tôi, chỉ cần biên dịch, nhưng không liên kết", bằng cách sử dụng tùy chọn '-c', vì vậy

g++ -c myClass.cpp 

đó sẽ sản xuất tệp myClass.o mà bạn có thể sử dụng sau này, ví dụ:

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib 

(Rõ ràng, tên thay thế với bất cứ điều gì bạn có trong dự án của bạn)

[1] Giả sử bạn sử dụng Scrips mối liên kết thường xuyên đi kèm với trình biên dịch. Có những "cách xung quanh quá", nhưng tôi nghĩ rằng đó là ngoài câu trả lời này.

7

Bạn đang cố gắng biên dịch một tệp thực thi, do đó, chức năng main được mong đợi. Bạn nên lập một đối tượng tập tin bằng cách sử dụng các -c cờ:

g++ -c myClass.cpp 

Trong khi bạn đang ở đó, tôi đề nghị thêm cờ cảnh báo -Wall -Wextra ít nhất.

1

Bạn đang tạo nguồn của mình làm ứng dụng. Thêm tùy chọn -c để chỉ tạo tệp đối tượng:

g++ -c myClass.cpp 
1

Chỉ biên dịch ?! sử dụng -c tùy chọn

g++ -c file.cpp 

nếu không dự án cần main.

1

Bạn cần sử dụng cờ -c để biên dịch và chỉ yêu cầu trình biên dịch tạo tệp đối tượng. Bạn đang nói với trình biên dịch để thực hiện một thực thi.

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