'Compilation error - defining a concrete implementation of templated abstract class [duplicate]
I have an abstract class in my header file:
template <class T>
class IRepository {
public:
virtual bool SaveData(Result<T> &r) = 0;
//virtual Result<T> & GetData()const = 0;
virtual ~IRepository() {}
};
I inherit it in the header file itself:
template <class T>
class Repo1 :public IRepository<T>
{
public:
bool SaveData(Result<T> &r)override;
//Result<T> & GetData() const override;
private:
std::mutex mx;
std::queue<T> m_q;
};
I am trying to define SaveData
in the cpp file:
template <class T>
bool Repo1::SaveData(Result<T> &r)
{
std::lock_guard<std::mutex> lock(mx);
if (m_q.size() > 10)
{
m_q.pop();
}
m_q.push(r);
return true;
}
The compiler complains: 'twsensors::Repo1': use of class template requires template argument list
The compiler doesn't complain about the following:
template <class T>
bool SaveData(Result<T> &r)
{
std::lock_guard<std::mutex> lock(mx);
if (m_q.size() > 10)
{
m_q.pop();
}
m_q.push(r);
return true;
}
The problem with this is if I create class Repo2 :public IRepository<T>
, then both of them will have their Save
method point to the same definition.
What's the reason behind the compilation error?
Solution 1:[1]
While implementing the template class method outside the class definition, the template class requires template arguments:
template <class T>
bool Repo1<T>::SaveData(Result<T> &r)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | 273K |