2016-05-05 7 views
2

Я попытался с ниже фрагментом кода и получил ошибку компиляции, как описано нижеОшибки компиляции с шаблонным классом

Фрагмент коды:

#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 ошибка:

template.cpp: В конструкторе â Сравнение: Сравнение (const SDataContainer &) [с DATATYPE1 = float] â: template.cpp: 45: 38: экземпляр отсюда template.cpp: 26: 9: ошибка: нет соответствующей функции для вызова âSDataContainer :: SDataContainer() â template.cpp: 26: 9: примечание: кандидаты: template.cpp: 8: 5: примечание: SDataContainer :: SDataContainer (TYPE1) [с TYPE1 = float] шаблон .cpp: 8: 5: примечание: кандидат ожидает 1 аргумент, 0 предоставлен template.cpp: 6: 8: примечание: SDataContainer :: SDataContainer (const SDataContainer &) template.cpp: 6: 8: note: кандидат ожидает 1 аргумент 0

Я не мог получить причину ошибки компиляции.

Может ли кто-нибудь помочь мне в этом вопросе?

+0

Существует только один конструктор для вашего 'SDataContainer член m_SData' огонь,' SDataContainer (ТИП1 PDATA) ', и он * не * по умолчанию. Сообщение об ошибке похоже на то, с чем проблема. – WhozCraig

ответ

4

Проблема заключается в том

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

Потому что вы не предоставите список инициализации, один Подразумевается для вас, как если бы Вы писали:

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

, который хочет вызвать конструктор по умолчанию для SDataContainer.

Решение изменить свой код так:

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

или добавить конструктор по умолчанию SDataContainer.

работает демо: http://ideone.com/Z0ycCj

Смежные вопросы