我想创建一个继承一个类的类,该类继承自另一个类。在这个基类中是一个模板。类模板已经定义
两个类从这个基类继承,然后两个类继承自一个或另一个类。当我试图将我创建的按钮合并到菜单中时,我得到'已经定义的类模板'编译错误。如果我只包含其中一种按钮类型,它会编译,但如果我编译时包含这两个文件,我会得到这个错误。
的基类的所有按钮
#pragma once
#include <SFML/Graphics.hpp>
namespace eng
{
namespace UI
{
template<class EventTemplate>
class ButtonBase
{
protected:
bool hasBeenClicked;
typename EventTemplate myEvent;
sf::Sprite mySprite;
public:
ButtonBase();
virtual bool CheckIfUsed(int mouseX, int mouseY, bool mouseClicked, bool mouseReleased) = 0;
EventTemplate GetButtonEvent();
sf::Sprite *GetSprite();
};
};
};
的基类的单选按钮
#pragma once
#include "Button Base.h"
namespace eng
{
namespace UI
{
template<class EventTemplate>
class RadioButton : public ButtonBase<EventTemplate>
{
protected:
enum ButtonState {MouseOutside, MouseOver, On, Off} myState;
public:
RadioButton();
virtual bool CheckIfUsed(int mouseX, int mouseY, bool mouseClicked, bool mouseReleased) = 0;
void TurnOff();
};
};
};
这两个类旨在被用作实例。
#pragma once
#include "Radio Button.h"
namespace eng
{
namespace UI
{
template<class EventType>
class RoundRadioButton : public RadioButton<EventType>
{
private:
sf::Rect myArea;
public:
RoundRadioButton(double setx, double sety, double setRadius, sf::Image &setImage, EventType setEvent);
bool CheckIfUsed(int mouseX, int mouseY, bool mouseClicked, bool mouseReleased);
};
};
};
#pragma once
#include "Radio Button.h"
namespace eng
{
namespace UI
{
template<class EventType>
class RoundRadioButton : public RadioButton<EventType>
{
private:
double myCenterX;
double myCenterY;
double myRadius;
public:
RoundRadioButton(double setx, double sety, double setRadius, sf::Image &setImage, EventType setEvent);
bool CheckIfUsed(int mouseX, int mouseY, bool mouseClicked, bool mouseReleased);
};
};
};
包含两个单选按钮类型的类。
#pragma once
#include <vector>
#include "Round Radio Button.h"
#include "Rectangular Radio Button.h"
namespace eng
{
namespace UI
{
template<class EventType>
class RadioButtonMenu
{
private:
RadioButton<EventType> *myCurrentChoice;
std::vector< RadioButton<EventType>* > myButtons;
public:
RadioButtonMenu();
~RadioButtonMenu();
void SetParameters(std::vector< RadioButton<EventType> > *setButtons, RadioButton<EventType> *defaultSelection);
void CheckMouseAction(double mousex, double mousey, bool mouseClicked, bool mouseReleased);
EventType GetSelection();
};
};
};
如果我忽略其中一个单选按钮包含,错误消失。我在搜索中查找了这个问题,并且使用#pragma once或#ifndef解决了这个问题,但我已经这么做了。我一直在阅读更多的模板,因为这是我第一次尝试使用它们,但我很难理解它。任何帮助解决这个问题或一般模板将不胜感激。
你的派生类都被命名为'RoundRadioButton'? – Naveen 2013-03-19 05:02:09
LOL OOPS!这实际上是整个问题!它假设是一个圆形按钮和一个矩形按钮。我要删除这个问题。谢谢。 – Azaral 2013-03-19 12:39:16