Есть базовый класс:
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. я не вижу смысла в этом наследовании...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть массивы, динамические двумерные, которые формируются в результате математических операцийМне надо несколько массивов объединить в один...
Когда вывожу в файл данные (язык - c++), через fstream, они появляется в нём только после того, как я этот файл закрою (то есть, если ofstream file, то информация...
Мне нужен вектор, в который будут передаваться массивы с множеством ключей, это можно сделать через структуру:
Нужно реализовать дерево отрезков с присваиванием на отрезке + запрос суммы (разумеется с ленивым проталкиванием)