Я попытался с ниже фрагментом кода и получил ошибку компиляции, как описано нижеОшибки компиляции с шаблонным классом
Фрагмент коды:
#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
Я не мог получить причину ошибки компиляции.
Может ли кто-нибудь помочь мне в этом вопросе?
Существует только один конструктор для вашего 'SDataContainer член m_SData' огонь,' SDataContainer (ТИП1 PDATA) ', и он * не * по умолчанию. Сообщение об ошибке похоже на то, с чем проблема. –
WhozCraig