模板类出现编译错误

Compilation error with template class

本文关键字:编译 错误      更新时间:2023-10-16

我尝试了下面的代码片段,得到了如下所述的编译错误

代码片段:

#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:在构造函数中Comparison::Comparison(const SDataContainer&)[with DATATYPE1=float]â:template.cpp:45:38:从这里实例化template.cpp:26:9:error:调用âSDataContainer::SDataContainer()没有匹配的函数template.cpp:26:9:注意:候选者是:template.cpp:8:5:注意:SDataContainer::SDataContainer(TYPE1)[其中TYPE1=float]template.cpp:8:5:注意:候选者需要1个参数,而提供了0template.cpp:6:8:注意:SDataContainer::SDataContainer(const SDataContainer&)template.cpp:6:8:注意:候选者需要1个参数,0提供

我找不到编译错误的原因。

有人能在这个问题上帮我吗?

问题是

    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