У меня есть упрощенная версия реализации связанного списка, над которой я работал. Я хотел бы сохранить количество элементов (узлов) компонентов как частный член, а затем позволить конструктору и деструктору Component
полностью обрабатывать переменную count
.Проблема с друзьями: как предоставить частный доступ к внутреннему классу?
Однако я получаю ошибку компилятора (VS2015) о запрет на доступ к count
любым функциям-членов (в том числе конструктора и деструктора), что я имею в Component
:
«Количество»: необъявленный идентификатор
Почему заявление friend
не предоставляет этот доступ в этом случае?
class Outer {
private:
class Component;
friend class Component;
public:
Outer() : count(0) {}
unsigned int size() {
return count;
}
void methodThatCreatesComponents() {
entryPoint = new Component(nullptr);
// I don't want to have to write ++count; every time I construct
}
void methodThatDeletesComponents() {
delete entryPoint;
// I don't want to have to write --count; every time I delete
entryPoint = nullptr;
}
private:
unsigned int count;
Component* entryPoint;
class Component {
public:
Component(Component* next) {
++count;
}
~Component() {
--count;
}
private:
Component* next;
};
};
C++ не позволяет автоматически внутренним классам иметь доступ к внешним классам. См. [Эта ссылка] (http://en.cppreference.com/w/cpp/language/nested_types). – callyalater
Во-вторых, 'class Component() {...};' должен быть 'class Component {...}' (без круглых скобок). – callyalater
@callyalater Вот почему я думал, что использование друга будет работать, но спасибо за ссылку, которая помогает. – Aposhian