singlepost

Enum C++ << На главную или назад  

Вообщем такая штука вышла.. пишу
enum ABC
{
a,
b,
c
}
Если это находится в главном модуле .cpp где ф-ция main() то все работает, но если переношу этот текст в header-файл пишет "enum type redefinition"

15 ответов в теме “Enum C++”

  1. 15
    Павел Потапов ответил:

    В двух, потому как в начале хедера и в конце.

    Впрочем, это дело вкуса и кодстайла. Ну… и возможностей компилятора ;)

  2. 14
    Vlad Ламбар ответил:

    почему это в двух местах? Только в хедере..однажды…в файле реализации ничего писать не надо…

    Конечно мы говорим о проблеме двойного включения…

    Дважды..а то и трижды…и даже больше, будет получаться только в случае кросс-платформенного кода, но это уже отдельная тема :)

    Да прагма поддерживается всеми нормальными компиляторами…но она не являеться стандартной. И с ней могут быть проблемы какие например:
    невозможно будет сказать к какому именно файлу принадлежит данный инклуд(например в символическая линковка в Unix системах). Вроде в последних версиях gcc уже нет такого, но 100% было…так что для старых компиляторов это ущербно :)

    Хотя с "+" это конечно скорость компиляции и простота записи :)

    Вообще-то можно пользоваться сейчас обоими способами, они взаимо-заменяемы :)

  3. 13
    Павел Потапов ответил:

    "#pragma once" проще – всего одна строчка (а не три в двух местах). В настоящее время уже достаточно стандартная вещь. Поддерживается и MSVC (чуть ли не с 6ки), и gcc.

  4. 12
    Vlad Ламбар ответил:

    можно й так :)
    но здесь есть как свои "+" так и "-"
    предпочитаю "include guards" прагме ))

  5. 11
    Евгений Гаврин ответил:

    Просто первой строкой в хедере пишите
    #pragma once
    и не надо ифдефов

  6. 10
    Артур Терменжи ответил:

    спс еще раз

  7. 9
    Артур Терменжи ответил:

    ага спасиб, просто в мсдне не нашел такого(

  8. 8
    Vlad Ламбар ответил:

    //www.cprogramming.com/reference/preprocessor/i...

    коротко и ясно, а MSDN поищи "preprocessor", "directives"

  9. 7
    Артур Терменжи ответил:

    а когда код может повторно включаться в .сpp файлы?

  10. 6
    Vlad Ламбар ответил:

    например так:
    есть два хедера:

    1.h и 2.h
    в 1.h прописано: #include "2.h"

    а потом в main.cpp например, такое:

    #include "1.h"
    #include "2.h"

    а вообще это основы…почитайте что-то…

  11. 5
    Vlad Ламбар ответил:

    в начале *.h файла пишешь что-то типа:

    #ifndef _bla_h_
    #define _bla_h_

    Название свое любое.
    Потом пишешь внутриности хидера, а в самом конце:

    #endif

    Оно не допустит повторного включения хедера в *.cpp файл, вот и конец проблем с подключением файла по несколько раз…

  12. 4
    Артур Терменжи ответил:

    Влад Ламбар опиши плз точно , как оно работает

  13. 3
    Vlad Ламбар ответил:

    мда…а про такую вещь как:

    #ifndef _bla_h_
    #define _bla_h_

    #endif

    слышал кто-то?

  14. 2
    Алексей Поляков ответил:

    спс точно

  15. 1
    Алексей Близнюк ответил:

    значит больше одного раза инклудится

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.