У меня есть эта шаблонная функция и класс в m c .h / m c. cpp файлах:
template <class MemT>
class MC;
template <class MemT>
MemT & getMCObj(int t_instNum);
class HBM;
template <class MemT>
class MC
{
public:
MC(){}
friend MemT & getMCObj<MemT>(int t_instNum);
private:
MemT memTobjList[12];
};
class HBM
{
public:
bool someFunc();
private:
int num_inst;
};
В файле cpp у меня есть
template<class MemT>
MemT & getMCObj(int t_instNum)
{
return MC<MemT>::memTobjList[t_instNum];
}
bool HBM::someFunc()
{
num_inst = 1;
}
template class MC<HBM>;
template HBM & getMCObj<HBM>(int t_instNum);
В основном:
int main()
{
MC<HBM> mC;
HBM & ptr = getMCObj<HBM>(3);
ptr.someFunc();
return 0;
}
Я получаю эту ошибку при компиляции:
In file included from mc.cpp:1:0:
mc.cpp: In instantiation of 'MemT& getMCObj(int) [with MemT = HBM]':
mc.cpp:16:43: required from here
mc.h:18:24: error: invalid use of non-static data member 'MC<HBM>::memTobjList'
Первая проблема заключалась в том, что я не создал экземпляр объекта шаблона в явном виде. Я исправил это, добавив это в файл cpp. Но теперь возникает ошибка, когда я использую функцию друга getMCObj для доступа к данным класса члена memTobjList. Пожалуйста, помогите мне понять, в чем проблема здесь.
Спасибо.