我想創建一個繼承一個類的類,該類繼承自另一個類。在這個基類中是一個模板。類模板已經定義
兩個類從這個基類繼承,然後兩個類繼承自一個或另一個類。當我試圖將我創建的按鈕合併到菜單中時,我得到'已經定義的類模板'編譯錯誤。如果我只包含其中一種按鈕類型,它會編譯,但如果我編譯時包含這兩個文件,我會得到這個錯誤。
的基類的所有按鈕
#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