Вообщем такая штука вышла.. пишу
enum ABC
{
a,
b,
c
}
Если это находится в главном модуле .cpp где ф-ция main() то все работает, но если переношу этот текст в header-файл пишет "enum type redefinition"
Вообщем такая штука вышла.. пишу
enum ABC
{
a,
b,
c
}
Если это находится в главном модуле .cpp где ф-ция main() то все работает, но если переношу этот текст в header-файл пишет "enum type redefinition"
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
8 декабря 2008 в 21:05
В двух, потому как в начале хедера и в конце.
Впрочем, это дело вкуса и кодстайла. Ну… и возможностей компилятора
8 декабря 2008 в 20:03
почему это в двух местах? Только в хедере..однажды…в файле реализации ничего писать не надо…
Конечно мы говорим о проблеме двойного включения…
Дважды..а то и трижды…и даже больше, будет получаться только в случае кросс-платформенного кода, но это уже отдельная тема
Да прагма поддерживается всеми нормальными компиляторами…но она не являеться стандартной. И с ней могут быть проблемы какие например:
невозможно будет сказать к какому именно файлу принадлежит данный инклуд(например в символическая линковка в Unix системах). Вроде в последних версиях gcc уже нет такого, но 100% было…так что для старых компиляторов это ущербно
Хотя с "+" это конечно скорость компиляции и простота записи
Вообще-то можно пользоваться сейчас обоими способами, они взаимо-заменяемы
8 декабря 2008 в 19:05
"#pragma once" проще – всего одна строчка (а не три в двух местах). В настоящее время уже достаточно стандартная вещь. Поддерживается и MSVC (чуть ли не с 6ки), и gcc.
8 декабря 2008 в 17:03
можно й так
но здесь есть как свои "+" так и "-"
предпочитаю "include guards" прагме ))
8 декабря 2008 в 17:02
Просто первой строкой в хедере пишите
#pragma once
и не надо ифдефов
8 декабря 2008 в 16:02
спс еще раз
8 декабря 2008 в 16:01
ага спасиб, просто в мсдне не нашел такого(
8 декабря 2008 в 16:01
//www.cprogramming.com/reference/preprocessor/i...
коротко и ясно, а MSDN поищи "preprocessor", "directives"
8 декабря 2008 в 15:05
а когда код может повторно включаться в .сpp файлы?
8 декабря 2008 в 15:05
например так:
есть два хедера:
1.h и 2.h
в 1.h прописано: #include "2.h"
а потом в main.cpp например, такое:
#include "1.h"
#include "2.h"
а вообще это основы…почитайте что-то…
8 декабря 2008 в 15:03
в начале *.h файла пишешь что-то типа:
#ifndef _bla_h_
#define _bla_h_
Название свое любое.
Потом пишешь внутриности хидера, а в самом конце:
#endif
Оно не допустит повторного включения хедера в *.cpp файл, вот и конец проблем с подключением файла по несколько раз…
8 декабря 2008 в 15:02
Влад Ламбар опиши плз точно , как оно работает
8 декабря 2008 в 14:04
мда…а про такую вещь как:
#ifndef _bla_h_
#define _bla_h_
#endif
слышал кто-то?
8 декабря 2008 в 14:00
спс точно
8 декабря 2008 в 13:04
значит больше одного раза инклудится