Возьмите следующие 2 примера ниже:Декларирование перечисления в начале класса против конца
struct Coord
{
private:
enum class Origin
{
Top_Left = 0,
Center
};
public:
Coord(Origin origin = Origin::Top_Left)
{}
};
int main()
{
}
Запуск этого выше, я не получаю никаких ошибок. С другой стороны, когда я запускаю это, я получаю следующую ошибку.
struct Coord
{
public:
Coord(Origin origin = Origin::Top_Left)
{}
private:
enum class Origin
{
Top_Left = 0,
Center
};
};
int main()
{
}
7:16: error: expected ')' before 'origin'
Кроме того, в Visual Studio 2015, я получаю сообщение об ошибке для идентификатора Origin
не найден в конструкторе.
Почему это?
Ошибка здесь: Live Example
@crashmstr^Аналогично –
Но согласно ¶9.4.3 книги Бьярн Стуррупа, PPP 4th edition: компилятор не заботится о порядке функции класса и данных; Он принимает декларации в любом порядке, который вы хотите представить. Нарушает ли класс перечисления? –
@LogicStuff Вы * можете * на самом деле переслать объявление * строго типизированный enum * s ("enum class") в C++ 11 и более поздних версиях. –