Следующее должно работать, однако вы должны создавать классы таким образом, базовый класс должен действительно иметь член типа производного класса.
Однако, поскольку член является просто указателем,код должен все еще компилироваться и работать, однако вы просите об ошибках.
Проблема с вашим кодом заключается в том, что класс Small должен быть определен до того, как вы создадите класс Little and Little, если вы создадите Small
Вы должны сделать это в одном файле следующим образом, так как они взаимозависимы
//file: SmallLittle.h
#pragma once
#include <iostream>
using namespace std;
class Small;
class Little
{
public:
Little(){ s = 0; }
void print(){ cout << "oops!" << endl; }
Small* s;
};
class Small :
public Little
{
public:
Small(void){}
~Small(void){}
};
Однако, поскольку Small является типом элемента Little, вам, вероятно, лучше создать отдельный класс следующим образом. Единственная причина для использованияВаш код таков, что вы можете использовать код Little, в котором Small не определен или не используется.Однако в этом случае лучше использовать тип void *
для указателя.
как следует
//file: Small.h
#pragma once
#include <iostream>
using namespace std;
class Small;
class Small
{
public:
Small(){ s = 0; }
void print(){ cout << "oops!" << endl; }
Small* s;
~Small(void){}
};
Кроме того, вам не нужно устанавливать s в 0, так какэто NULL, которое должно быть значением до тех пор, пока вы не создадите указатель, используя new или assign указатель.