2012-02-07 36 views
5
I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main 

Yeni bir proje başlattım çünkü aynı hatayı daha büyük bir projede geçiriyordum. Yeni anahtar sözcük kullanarak alan ayırmaya çalıştığımda hata oluşuyor. Bu hata saçma olursa lütfen beni affet çünkü son aylarda hiçbir şey programlamamışım. Nedeniyle C++ 'ın derleme modelinde bir garabeti içinŞablon sınıfı kullanırken Linker hatası?

/********************file hijo.h******************/ 
#pragma once 
#ifndef hijo_h 
#define hijo_h 

template <class A> 
class hijo 
{ 
public: 
    hijo(void); 
    ~hijo(void); 
}; 
#endif 


    /********************file hijo.cpp***************/ 
    #include "hijo.h" 
#include <iostream> 
using namespace std; 

template <class A> 
hijo<A>::hijo(void) 
{ 
} 
template <class A> 
hijo<A>::~hijo(void) 
{ 
} 
    /*********************at main() function ***************/ 

#include <iostream> 
#include "hijo.h" 

int main(){ 

    hijo<int> *h = new hijo<int>; <---- PROBLEM AT THIS LINE 

    system("pause"); 
    return 0; 
} 

cevap

10

, şablon sınıfları için çok temiz .h ve .cpp dosyaları ayırmak mümkün değil. Özellikle, bir şablon sınıfını kullanmak isteyen herhangi bir çeviri birimi (C++ kaynak dosyası) tüm şablon tanımına erişime sahip olmalıdır. Bu dilin tuhaf bir tuhafı ama maalesef kalmak için burada.

Bir seçenek, uygulamayı kaynakta değil başlık dosyasında koymak, daha sonra bir .cpp dosyasına sahip olmamaktır. Örneğin, şu üstbilgiye sahip olabilirsiniz:

#pragma once 
#ifndef hijo_h 
#define hijo_h 

template <class A> 
class hijo 
{ 
public: 
    hijo(void); 
    ~hijo(void); 
}; 

/* * * * Implementation Below This Point * * * */ 

template <class A> 
hijo<A>::hijo(void) 
{ 
} 
template <class A> 
hijo<A>::~hijo(void) 
{ 
} 

#endif 

Bu yardımcı olur umarız!

+0

"Ama ne yazık ki burada kalıyor" - modüller alıncaya kadar. \ * haçlar parmakları * – Xeo

+0

BİR ÇANTA GİBİ İŞİ, sadece çözümünüze biraz düzeltmek zorunda kaldı. .h dosyasına kod eklemek yerine .hp dosyasının en altında .hp dosyasının sonuna ekledim. Her iki parça aynı dosyadaymış gibi aynı sonuçtur. "Hijo.cpp" alt #endif de ... Cevabınız için u teşekkür ve #ifndef hijo_cpp #define hijo_cpp içinde ... – HoNgOuRu

+0

lazım soruyu işaretlemek için 8 dakika daha bekleyin Yanıt olarak – HoNgOuRu

İlgili konular