2016-05-05 8 views
2

ich mit dem folgenden Code-Schnipsel versucht und bekam die Kompilierung-Fehler, wie unten beschriebenÜbersetzungsfehler mit Template-Klasse

Code-Snippet:

#include <iostream> 

using namespace std; 

template <class TYPE1> 
struct SDataContainer 
{ 
    SDataContainer(TYPE1 pData) 
    { 
     m_pData = pData; 
    } 

    bool operator==(const SDataContainer<TYPE1>& pData) 
    { 
     return (m_pData == pData.m_pData); 
    } 

    TYPE1 m_pData; 
}; 
template <class DATATYPE1> 
class Comparison 
{ 
    public: 
     Comparison (const SDataContainer<DATATYPE1>& pSData) 
     { 
      m_SData = pSData; 
     } 
     bool operator==(const Comparison<DATATYPE1>& pData) 
     { 
      return (m_SData.m_pData == pData.m_SData.m_pData); 
     } 
     SDataContainer<DATATYPE1> m_SData; 
}; 
int main() 
{ 
    SDataContainer<float> sDCObj1 (10.0); 
    SDataContainer<float> sDCObj2 (10.0); 
    cout << "Verify the data: " << (sDCObj1 == sDCObj2) << endl; 
    Comparison<float> sCObj1 (sDCObj1); 
    Comparison<float> sCObj2 (sDCObj2); 
    cout << "Verify the data: " << (sCObj1 == sCObj2) << endl; 
    return 0; 
} 

Compialtion Fehler:

Template.cpp: Im Konstruktor Ein Vergleich :: Vergleich (const SDataContainer &) [mit DATATYPE1 = float] â: Template.cpp: 45: 38: instanziiert von hier Template.cpp: 26: 9: Fehler: keine passende Funktion für den Aufruf von âSDataContainer :: SDataContainer() â template.cpp: 26: 9: Hinweis: Kandidaten sind: template.cpp: 8: 5: Hinweis: SDataContainer :: SDataContainer (TYPE1) [mit TYPE1 = float] Vorlage .cpp: 8: 5: note: Kandidat erwartet 1 Argument, 0 vorausgesetzt template.cpp: 6: 8: note: SDataContainer :: SDataContainer (const SDataContainer &) template.cpp: 6: 8: hinweis: Kandidat erwartet 1 Argument, 0 liefern

ich konnte nicht der Grund für die Erstellung Fehler.

Kann mir jemand in dieser Frage helfen?

+0

Es gibt nur einen Konstruktor für Ihre 'SDataContainer m_SData' Mitglied Feuer,' SDataContainer (TYPE1 pData) ', und es * nicht * default. Die Fehlermeldung scheint auf dem aktuellen Stand zu sein, was das Problem ist. – WhozCraig

Antwort

4

Das Problem ist

Comparison (const SDataContainer<DATATYPE1>& pSData) 
     // <<< here 
    { 
     m_SData = pSData; 
    } 

Weil Sie für Sie keine Initialisiererliste liefern, wird eine implizierte, als ob Sie schrieb:

Comparison (const SDataContainer<DATATYPE1>& pSData) 
    : m_SData() 
    { 
     m_SData = pSData; 
    } 

, die den Standard-Konstruktor aufrufen will SDataContainer.

Die Lösung ist der Code wie folgt zu ändern:

Comparison (const SDataContainer<DATATYPE1>& pSData) 
    : m_SData(pSData) 
    { 
    } 

oder einen Standard-Konstruktor SDataContainer hinzuzufügen.

Arbeits Demo: http://ideone.com/Z0ycCj

Verwandte Themen