Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 16.05.2018, 22:04   #1
luminoforest
 
Регистрация: 17.04.2018
Сообщений: 9
Репутация: 10
По умолчанию паттерн 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 Кб, 0 просмотров)
luminoforest вне форума   Ответить с цитированием
Старый 17.05.2018, 06:02   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,063
Репутация: 2054

icq: 216409213
По умолчанию

Ну так перенесите объявление Visitor в начало, раз вы на него ссылаетесь.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


02:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru