c++ как наследовать private переменную из базового в private секцию дочернего класса?

Допустим у меня есть интерфейс А и класс B, который наследуется от А. В классе А есть переменные хранящие данные о файле, а B загружает файл и записывает эти данные, они должны быть в private.

Как сделать так, чтобы при наследовании переменные из А были недоступны, но их можно было использовать в B ?

template <typename _T>
class A {
public:
    virtual void LoadFile(const char* FileName) = 0;

private:
    _T* m_DataPtr;
    int m_ID;
    const char* m_FileName;
};

class B : A<char> {
    using A<char>::m_FileName; // C2877 'A<char>::m_FileName' is not accessible from 'A<char>'
    using A<char>::m_DataPtr;  // C2877 'A<char>::m_DataPtr' is not accessible from 'A<char>'
    using A<char>::m_ID;       // C2877 'A<char>::m_ID' is not accessible from 'A<char>'
public:
    B() = default;
    ~B() {
        delete(m_DataPtr);  // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'
        m_ID = 0;           // Error C2248 'A<char>::m_ID': cannot access private member declared in class 'A<char>'
    }

    void LoadFile(const char* FileName) {
        FILE* file = fopen(FileName, "r");

        m_FileName = FileName;         // Error C2248 'A<char>::m_FileName': cannot access private member declared in class 'A<char>'
        m_ID = 1;                      // Error C2248 'A<char>::m_ID': cannot access private member declared in class 'A<char>'
        m_DataPtr = new char[10];      // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'
        fread(m_DataPtr, 1, 10, file); // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'

        fclose(file)
    }
};

Ответы (1 шт):

Автор решения: Mikhailo

Объявить коасс B другом класса A.

В классе A написать:

friend class B;

Както так:

class B;

template <typename _T>
class A {

friend class B;

public:
→ Ссылка