2015-05-25 6 views
1

У меня возникла проблема, когда я хочу передать значение 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; 
} 
+0

Это работает, если вы ничего не дадите конструктору (чипы m_doubloon {};)? – KABoissonneault

+0

Да @KABoissonneault, он использует значения по умолчанию, чем. –

+3

Включили ли вы заголовок, который объявляет перечисление? Является ли перечисление доступным пространством имен? Пожалуйста, напишите [достаточно кода] (http://stackoverflow.com/help/mcve), чтобы продемонстрировать ошибку. –

ответ

2

Теперь вы, наконец, опубликовал достаточно кода, мы видим, что это

chips m_doubloon(DOUBLOON); 

фактически декларация члена класса. Члены класса не могут быть инициализированы (), только с = или {}. Предположим, что ваш компилятор поддерживает в классе инициализации (введен в C++ 11), вы должны быть хорошо с

chips m_doubloon{DOUBLOON}; 
       ^ ^

В качестве альтернативы, вы можете инициализировать элементы в списке инициализатора конструктора, а не в своих заявлениях.

+0

Да, это была проблема! Спасибо! –

+0

Я думал, что это был конструктор для класса, и используя() я вызывал конструктор для этого класса. Я ошибаюсь, думая об этом? –

+1

@YoshiPeters: Это объявление участника, а не конструктор. В отличие от объявлений в других местах, вы не можете использовать '()' для предоставления аргументов инициализатора или конструктора для объявления участника. –

-1

Вам необходимо пройти DOUBLOON в ENUMchipType::DOUBLOON

+0

Просто попробовал это, получил ту же ошибку. –

+3

Нет, вы этого не сделаете, это не перечисление в форме. –

+0

Требуется только в том случае, если это был «класс перечисления» – KABoissonneault

2

В классе player, вы должны заменить

chips m_doubloon(DOUBLOON); 
chips m_victoryPoints(VICTORYPOINT); 

от

chips m_doubloon{DOUBLOON}; 
chips m_victoryPoints{VICTORYPOINT}; 
+0

Да, это была проблема! Спасибо! –

Смежные вопросы