Перед тем, как определить другую, вам нужно переслать-объявить каждый класс. В заголовке, который определяет PCB
, написать
class linklist;
перед определением PCB
, и в заголовке, который определяет linklist
, написать
class PCB;
перед определением linklist
. Таким образом, когда компилятор встречается с каждым из определений классов, он будет знать, что имя «другого» класса действительно и позволяет вам указывать на него указатели, хотя он еще не полностью определен.
Edit: К сожалению, я только что заметил, что ваша linklist::append
функции фактически принимает PCB
экземпляра, а не указатель. В этом случае вам необходимо убедиться, что класс PCB
определен до linklist
, но вам все равно нужно переслать linklist
до PCB
, чтобы вы могли сделать указатели на него. Порядок код должен быть:
class linklist;
class PCB {
// involves pointers to linklist
;
class linklist {
// holds instances of PCB
};
Редактировать снова: я 'неправильно ваш **linklist list
как указатель на linklist
(хотя это синтаксически неправильно).
Что вам нужно сделать, это:
- Прогнозные объявить
PCB
так, что определение linklist
может относиться к нему в подписи метода.
- Определить класс
linklist
, но не его append
функция еще.
- Определите класс
PCB
, который может содержать экземпляр linklist
, поскольку этот класс теперь полностью определен.
- Определите функцию
linklist::append()
, которая может принимать экземпляр PCB
, поскольку этот класс теперь полностью определен.
Это будет ваш код для компиляции, но он не будет делать то, что вы, вероятно, хотите, потому что способ, которым вы определили свои классы, не имеет большого смысла. Ваш класс PCB
не ссылается на список, он содержит в себе список. Так как переменная-член list
не указатель, каждый PCB
экземпляр содержит целые linklist
. Когда вы append()
a PCB
до linklist
, вы делаете копию этого целого PCB
, включая (0) linklist
, который он содержит.
У меня такое чувство, что вы приходят с Java или C#, и вы предполагаете, что это ссылки, когда они на самом деле нет. Вам нужно узнать, как использовать указатели.
Есть ли они в одном файле? Можете ли вы указать конкретное сообщение об ошибке? – xdhmoore
Почему вы пишете свой собственный список, вместо того, чтобы использовать 'std :: list'? – Wyzard
@Wyzard: Обычное (домашнее задание) упражнение или подготовка к собеседованию? –