У меня возникла проблема, когда я хочу передать значение enum стандартным конструктором. Мои перечисления определяются следующим образом:Передача enum в качестве параметра в конструктор
typedef enum
{
DOUBLOON,
VICTORYPOINT
} ENUMchipType;
Они хранятся в отдельном файле .h.
Но когда я пытаюсь сделать это:
chips m_doubloon(DOUBLOON);
Я получаю следующее сообщение об ошибке:
error: C2061: syntax error : identifier 'DOUBLOON'
код для конструктора по умолчанию является:
chips::chips(
ENUMchipType chipType = DOUBLOON,
int amountValue1 = 0,
int amountValue5 = 0,
QObject *parent = 0) :
m_chipType(chipType),
m_chipCountValue1(amountValue1),
m_chipCountValue5(amountValue5),
QObject(parent) {}
кто-нибудь идею что не так с этим фрагментом кода? Заранее спасибо!
Редактировать: Я уже пробовал поместить enum, это класс, открытый публичный элемент и выводимый из него класс чипов, но без каких-либо успехов.
EDIT 2: Этот фрагмент кода воспроизводит ошибку в Visual Studio 2013
#include <string>
using namespace std;
//enums.h
typedef enum
{
DOUBLOON,
VICTORYPOINT
} ENUMchipType;
typedef enum
{
PLAYER1,
PLAYER2,
PLAYER3,
PLAYER4,
PLAYER5
} ENUMplayer;
// In chips.h
class chips
{
private:
int m_chipCountValue5;
int m_chipCountValue1;
ENUMchipType m_chipType;
public:
explicit chips(
ENUMchipType chipType = ENUMchipType::DOUBLOON,
int amountValue1 = 0,
int amountValue5 = 0);
ENUMchipType getChipType() const { return m_chipType; }
};
// Chips.cpp
chips::chips(ENUMchipType chipType, int amountValue1, int amountValue5) :
m_chipType(chipType),
m_chipCountValue1(amountValue1),
m_chipCountValue5(amountValue5) {}
// PLayer.h
class player
{
private:
ENUMplayer m_ID;
string m_name;
public:
chips m_doubloon(DOUBLOON);
chips m_victoryPoints(VICTORYPOINT);
explicit player(ENUMplayer ID = PLAYER1, string name = "");
void setName(string name = "") { m_name = name; }
void setID(ENUMplayer ID) { m_ID = ID; }
string getName() const { return m_name; }
ENUMplayer getID() const { return m_ID; }
};
//player.cpp
player::player(ENUMplayer ID, string name) :
m_ID(ID),
m_name(name) {}
int main() {
return 0;
}
Это работает, если вы ничего не дадите конструктору (чипы m_doubloon {};)? – KABoissonneault
Да @KABoissonneault, он использует значения по умолчанию, чем. –
Включили ли вы заголовок, который объявляет перечисление? Является ли перечисление доступным пространством имен? Пожалуйста, напишите [достаточно кода] (http://stackoverflow.com/help/mcve), чтобы продемонстрировать ошибку. –