Есть базовый класс:
class csymbol
{
public:
enum_symbol_type type;
enum_keywords kw;
enum_operations op;
string ident;
cvalue value;
};
От него наследуется класс
class cvalue : public csymbol
{
public:
const_types type;
int cint;
double creal;
char cchar;
string cstring;
bool cbool;
};
При сборке получаю ошибку Ошибка C2504 csymbol: не определен базовый класс. Что я делаю не так?
Конфигурация классов бессмысленна. Класс csymbol включает класс cvalue в качестве подобъекта, а класс cvalue включает класс csymbol в качестве подобъекта. Это невозможно, ибо представляет собой бесконечно рекурсивную структуру данных.
Угадываю, что вы устроили у себя в коде циклическое включение заголовочных файлов и, ожидаемо, получили эту ошибку.
Не пытайтесь создавать структуры данных с циклическим включением подобъектов - это невозможно. И не пытайтесь делать циклическое включение заголовочных файлов - это ничего не даст.
Добавьте перед классами предварительные объявления:
class csymbol;
class cvalue;
Попробуйте вместо
cvalue value;
использовать
cvalue *value;
Вот этот код у меня скомпилировался:
#include "stdafx.h"
#include <string>
using namespace std;
#define const_types int
enum enum_symbol_type{a,b};
enum enum_keywords{c,d};
enum enum_operations{e,f};
class csymbol;
class cvalue;
class csymbol
{
public:
enum_symbol_type type;
enum_keywords kw;
enum_operations op;
string ident;
cvalue* value;
};
class cvalue : public csymbol
{
public:
const_types type;
int cint;
double creal;
char cchar;
string cstring;
bool cbool;
};
int _tmain(int argc, _TCHAR* argv[])
{
cvalue value;
csymbol symbol;
return 0;
}
тут нет классов - это обычные структуры данных, и нагляднее их обьявлять как структуры. Оставьте в базовом классе только string ident; если компилируется, то по очереди включайте остальные (конечно кроме cvalue value; ), тогда узнаете где у вас ошибка.
P.S. я не вижу смысла в этом наследовании...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости