2013-04-26 27 views
5

olmadan Cpp sınıfında 'main' tanımsız başvuru yanıtı almaya çalışırken this ile karşılaştım. Ancak, posterin birden fazla dosyaya sahip olduğu ve bağlantı kurulmadığı ve dolayısıyla hatanın olduğu anlaşılıyor.`main()

Ancak, neden tek bir dosya kullanırken bu hatayı alıyorum?

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 

Ve neden derleme zamanında (benim kod ana bir söz bulur yerden ) burada gerekli main mı? main, kod yürütmenin başlangıç ​​noktasıdır, ancak derleyici neden burada bir main'a ihtiyacım olduğunu varsaymaktadır. Başka bir dosyada tanımlanmış olabilir ve çalıştırılabilir yapmak için gcc -o'u kullanabilir miyim?

Ya da kodda hataya neden olan başka bir şey eksik miyim?

#include<iostream> 
class myClass 
{ 

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

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

}; 

cevap

5

main gerekli değildir. Programın bir yerde başlatılması gerektiğinden, bir programın bir yürütülebilir dosyaya bağlanması gerekir [1].

Sen derleyici söylemek gerekir "sadece derlemek, bu benim programın tamamı değil, ama bağlantı yok" böylece, '-c' seçeneğini kullanarak, üretecek

g++ -c myClass.cpp 

Daha sonra kullanabileceğiniz bir myClass.o dosyası, örn.

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

(Açıkçası, projenizde her ne ile ikame isimler)

[1] derleyici ile gelen düzenli bağlayıcı scrips kullanmak varsayarsak. "Bunun çevresinde de yollar var", ama bence bu cevabın ötesinde.

7

Bir yürütülebilir derlemeye çalışıyoruz, bu yüzden bir main işlev bekleniyor. Sen -c bayrağını kullanarak bir nesne dosyasını derlemek olmalıdır:

g++ -c myClass.cpp 

bunda iken, ben en azından uyarı bayrakları -Wall -Wextra eklemenizi öneririz.

1

Kaynağınızı bir uygulama olarak geliştiriyorsunuz. Sadece nesne dosyası üretmek için -c seçeneği ekleyin:

g++ -c myClass.cpp 
1

derleme'yi sadece ?!

g++ -c file.cpp 

aksi proje main ihtiyacı -c seçeneğini kullanın.

1

-c bayrağını derlemek için derleyin ve yalnızca derleyiciye bir nesne dosyası oluşturmasını söyleyin. Derleyicinin yürütülebilir bir dosya oluşturmasını söylüyorsun. Bir kaynak dosyayı derlemek için

İlgili konular