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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2012, 20:36   #1
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию Полиморфизм

Доброго дня! лаба по на полиморфизм, чахну часа 2- понять не могу где ошибка...
программа перевода фута в метр и дюйм

папа-класс абстрактный
converter.h
Код:
#include <string>

class converter{

public:
	converter();
    virtual double convert(double)=0;
	virtual std::string message()=0;
	virtual void set_foot(double)=0;
	
	virtual ~converter();
};
производный класс 1
converter foot to metr.h
Код:
#include "converter.h"
#include <iostream>
#include <string>

class foot_to_metr : public converter{
private:
	double foot;

public:
	foot_to_metr(double _foot=0){
		set_foot(_foot);
	}
	virtual ~foot_to_metr(){};
//
	 void set_foot(double _foot){
		foot=_foot;
	}
//
	 double convert(double){
		return foot*0.305;
	}
//
	virtual std::string message(){
		std::cout<<"Foot to metr: "<<std::endl;
	}

};
класс наследник 2
converter foot to duim.h
Код:
#include "converter.h"
#include <iostream>
#include <string>

class foot_to_duim : public converter{
private:
	double foot;

public:
	//конструктор/деструктор
	foot_to_duim(double _foot=0){
		set_foot(_foot);
	}
	virtual ~foot_to_duim(){};
//сет метод
	 void set_foot(double _foot){
		foot=_foot;
	}
//конвертер
	double convert(double){
		return foot*12;
	}
//
    std::string message(){
		std::cout<<"Foot to duim: "<<std::endl;
	}

};
main
Код:
#include <iostream>
#include <vector>
#include "converter foot to metr.h"
#include "converter foot to duim.h"
#include "converter.h"


using namespace std;

int main(){
    vector<converter*> v;
	v.push_back(new foot_to_metr());
	v.push_back(new foot_to_duim());

	double val=100;

	for(int i=0; i<v.size(); i++){
		cout  << v[i]->message()
		      << " :"
			  << v[i]->convert(val)
			  <<endl;
	}


	system("pause");
	for(int i=0; i<v.size(); i++)
		delete v[i];
	return 0;
}
пишет error C2011: 'converter' : 'class' type redefinition почему?
Кудаив вне форума Ответить с цитированием
Старый 19.05.2012, 23:05   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

нет защиты от повторного включения в h-файлах
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 20.05.2012, 11:41   #3
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

а не подскажите пожалуйста как сделать?
Кудаив вне форума Ответить с цитированием
Старый 20.05.2012, 14:03   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Оборачиваете h-файл в такой блок
Код:
#ifndef SOMETHING_STRING
#define SOMETHING_STRING 1
/* ваш код */
#endif
при второй попытке включить это header условие пройдено не будет, файл не будет повторно включен, и переопределения не будет. Естественно, для каждого файла эта константа должна быть своя
Ещё в MSVS для этого вроде как директива
Код:
#pragma once
служит, но не факт, что она сработает в других компиляторах. А вот первый способ работает везде
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм. Wa1demar Общие вопросы C/C++ 0 04.03.2012 14:23
Полиморфизм Anubys Помощь студентам 1 26.12.2011 20:42
Полиморфизм Zorgan Visual C++ 22 29.08.2011 12:23
Полиморфизм MasterSporta Общие вопросы C/C++ 3 10.04.2011 23:46
полиморфизм slayerblya Общие вопросы C/C++ 1 27.02.2011 01:43