Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2018, 21:04   #1
luminoforest
 
Регистрация: 17.04.2018
Сообщений: 9
По умолчанию паттерн visitor. исправление ошибок

в одном из курсов сначала создали иерархию классов, а потом добавили visitor. части кода были в двух местах, я их собрала, но оно не работает.помогите пожалуйста с этим разобраться
прилагаю скрин с руганью Студии. (номер строки на 8 меньше,здесь удалила дефайны)
Код:
struct Expression {
	virtual double evaluate() const = 0;
	virtual ~Expression() {}
	virtual void visit(Visitor * visitor) const = 0;
};
struct Number : Expression {
	void visit(Visitor * visitor) const { visitor->visitNumber(this); }
	double get_value() const { return value; }
	Number(double value)
		: value(value)
	{}
	double evaluate() const { return value; }
private:
	double value;
};
struct BinaryOperation : Expression {
	BinaryOperation(Expression const * left, char op, Expression const * right)
		: left(left), op(op), right(right)
	{ }
	~BinaryOperation() {
		delete left;
		delete right;
	}
	double evaluate() const {
		if (op == '+') {
			return (left->evaluate() + right->evaluate());}
		else if (op == '-') {
			return (left->evaluate() - right->evaluate());}
		else if (op == '*') {
			return (left->evaluate() * right->evaluate());}
		else if (op == '/') {
			return (left->evaluate() / right->evaluate());}
	}
	Expression const * get_left()  const { return left; }
	Expression const * get_right() const { return right; }
	char get_op() const { return op; }
private:
	char op;
	Expression const* left;
	Expression const* right;
};
struct Visitor {
	virtual void visitNumber(Number const * number) = 0;
	virtual void visitBinaryOperation(BinaryOperation const * binary) = 0;
	virtual ~Visitor() { }
};
struct PrintBinaryOperationsVisitor : Visitor {
	void visitNumber(Number const * number)
	{ }
	void visitBinaryOperation(BinaryOperation const * bop)
	{
		bop->get_left()->visit(this);
		std::cout << bop->get_op() << " ";
		bop->get_right()->visit(this);
	}
};
Изображения
Тип файла: jpg олрлро.jpg (43.9 Кб, 121 просмотров)
luminoforest вне форума Ответить с цитированием
Старый 17.05.2018, 05:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так перенесите объявление Visitor в начало, раз вы на него ссылаетесь.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправление ошибок валидации thehappyman HTML и CSS 2 09.05.2016 18:27
Исправление ошибок C++/CLI Максим 116 Visual C++ 2 29.12.2013 18:44
Исправление ошибок в программе Makson Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2011 13:15
Исправление ошибок С# PROkaZZZniK Помощь студентам 5 15.11.2011 17:16
исправление ошибок toldo Microsoft Office Word 2 09.01.2011 15:22