2010-09-27 18 views
5

C++ 'da başlık dosyaları ile programlama konusunda yeniyim.header dosyalarının C++ ile nasıl bağlanması 0 +

//a.h 
#ifndef a_H 
#define a_H 
namespace hello 
{ 
    class A 
    { 
    int a; 
    public: 
     void setA(int x); 
     int getA(); 
    }; 
} 
#endif 

//a.cpp 
#include "a.h" 
namespace hello 
{ 
    A::setA(int x) 
    { 
    a=x; 
    } 
    int A::getA() 
    { 
    return a; 
    } 
} 

//ex2.cpp 
#include "a.h" 
#include<iostream> 
using namespace std; 

namespace hello 
{ 
    A* a1; 
} 
using namespace hello; 
int main() 
{ 
    a1=new A(); 
    a1->setA(10); 
    cout<<a1->getA(); 
    return 1; 
} 

Ben g++ ex2.cpp ile derlemek deneyin, bu hatayı alıyorum: Bu benim şimdiki kodudur

In function `main': 
ex2.cpp:(.text+0x33): undefined reference to `hello::A::setA(int)' 
ex2.cpp:(.text+0x40): undefined reference to `hello::A::getA()' 
collect2: ld returned 1 exit status 

Neden çalışmıyor ve bunu nasıl düzeltebilirim?

+0

kaynak kodunu kullanınız biçimlendirme özelliği, editördeki "101 010" simgesini tıklayın. – mikerobi

+1

a.cpp dosyanızdaki 'A :: setA' önündeki 'void' değerini unutmuşsunuzdur. "Başlık dosyalarını bağlamazsınız" için –

cevap

2

Şu anda derleme ve sadece ex2.cpp bağlayan ancak bu dosyayı a.cpp böylece derlemek ve yanı sıra bağlantı a.cpp gerek sınıf def ve fonksiyon kullanımı mevcut çağrıları yapar:

g++ ex2.cpp a.cpp 

yukarıdaki komuta edecek Kaynak dosyayı (.cpp) nesne dosyalarına derleyin ve bunlara a.out yürütülebilir dosyasını vermek için bağlayın.

23

Başlık dosyalarını bağlamıyorsunuz. .cpp dosyalarının derlenmesiyle oluşturulan nesne dosyalarını bağlarsınız. Tüm kaynak dosyalarınızı derlemeniz ve sonuçta oluşan nesne dosyalarını linker'e aktarmanız gerekir.

Hata iletisinden GCC kullanıyormuşsunuz gibi görünüyor. Eğer öyleyse, .cpp dosyalarının her ikisini de derleyebilmeniz ve linker'le ortaya çıkan nesne dosyalarını çağırmasını sağlamak için

yapabilirsiniz.

+8

+1. :) –

8

Sen bağlantıyı hem kaynak dosyaları, örneğin derlemek ve gerekir:

g++ ex2.cpp a.cpp -o my_program 
3

Sen derlemek gerekir ve daha sonra her iki kaynak bağlantı (.cpp) dosyaları:

g++ -Wall -pedantic -g -o your_exe a.cpp ex2.cpp 
+1

Ben -Werror 'de :) önerebilir miyim? –