我尝试使用下面的代码片段并获得了编译错误,如下所述
代码段:
#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;
}
比赛错误:
template.cpp:在构造函数中比较::比较(const SDataContainer&amp;)[与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] template.cpp:8:5:注意:候选人需要1个参数,0提供 template.cpp:6:8:注意:SDataContainer :: SDataContainer(const SDataContainer&amp;) template.cpp:6:8:注意:候选人需要1个参数,0提供
我无法理解编译错误。
有人可以在这个问题上帮助我吗?
答案 0 :(得分: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添加默认构造函数。