Enum как параметр функции - PullRequest
       13

Enum как параметр функции

1 голос
/ 25 декабря 2010

что-то не так с этим кодом в c ++?

enum OpenMode{
    Read = 0x1,
    Write = 0x2,
    Append = 0x4
};

void main(){
    open_file("./something", OpenMode::Write); //!!!!!!!!!
}

void open_file(string name, OpenMode om){
    .
    .
    .
}

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

Хорошо, естьВы когда-нибудь замечали, как работает IOS?Например:

somefile.open(file_name, ios::in | ios::out)

Мне нужен способ сделать что-то вроде этого: "что-то :: что-то"!

Ответы [ 2 ]

2 голосов
/ 25 декабря 2010

Да, что-то не так.Имена, созданные enum, попадают в область действия, содержащую enum, они не квалифицируются по имени enum.

В C ++ 0x есть новый "перечислимый класс"Синтаксис, который вкладывает имена в перечисление.

Обходной путь в C ++ 03 заключается в использовании структуры или пространства имен, то есть:

namespace OpenMode
{
    enum OpenMode
    {
        Read = 0x1,
        Write = 0x2,
        Append = 0x4
    };
}

// blah blah OpenMode::Write

К сожалению, он также меняет имя типа наOpenMode::OpenMode.

0 голосов
/ 25 декабря 2010

подпись main должна быть

 int main()

или

int main(int, char *[])

без запятой, в вашем перечислении

enum OpenMode
{
    Read   = 0x1,  // use commas to delimit enum constants, not semicolons
    Write  = 0x2,
    Append = 0x4
};
...