Функция друга шаблона класса шаблона, которая возвращает ссылку на объект класса реализации - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть эта шаблонная функция и класс в 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. Пожалуйста, помогите мне понять, в чем проблема здесь.

Спасибо.

...