| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > error C2374: [переменная] : redefinition; |
| Автор: malor 27.6.2011, 14:44 | ||
Раскидал содержимое MakeScreenShot.cpp по разным cpp и добавил хедеров, теперь VS2008 пишет:
Сами переменные pathEventKB и т.д. лежат в файле Path.h. Внутри файла MakeScreenShot.cpp есть строки: #include "keyboard.h" #include "mouse.h" Внутри каждого из этих двух заголовочных файлов есть строка: #include "Log.h" A файле "Log.h" есть строка: #include "Path.h". Как сделать, чтоб не было redefinition'а? |
| Автор: triclosan 27.6.2011, 15:07 |
| в файлах-хедерах есть проверки на "многоразовое" включение? Если нет - необходимо добавить стандартную-переносимую, либо, раз у вас VS2008 можно #pragma once |
| Автор: malor 27.6.2011, 16:55 | ||
Добавил #pragma once в файл Path.h, теперь такие error'ы про LNK2005:
![]() |
| Автор: maxim1000 27.6.2011, 17:52 |
| определения (не объявления) статических переменных в h-файлах? |
| Автор: malor 27.6.2011, 19:06 |
| В Path.h строки вида: const char* pathEventKB = "Z:\\EventKB.txt"; |
| Автор: maxim1000 27.6.2011, 19:12 |
| надо в h-файлах оставить _объявления_, а в cpp перенести _определения_ объявление: extern const char *pathEventKB; определение: const char *pathEventKB="something"; |
| Автор: malor 27.6.2011, 19:24 |
| Я сейчас заменил строку (а также и прочие) const char* pathEventKB = "Z:\\EventKB.txt"; на #define pathEventKB "Z:\\EventKB.txt" и скомпилилось без error'ов. Так не считается правильным ? |
| Автор: maxim1000 27.6.2011, 21:14 |
| define'ы без надобности использовать не стоит препроцессор C++ - по сути, другой язык и с самим C++ имеет мало общего (а иногда и конфликтует) иногда без него не обойтись, но это не тот случай |
| Автор: malor 27.6.2011, 21:37 |
| Я переменные хотел поместить в один файл, чтоб если уж человек захочет сменить пути, то не придется ползать по файлам где лежат т.н. "определения". Такое удобство не обеспечить ? |
| Автор: maxim1000 27.6.2011, 23:35 |
| ну если это что-то типа конфигурации для сборки программы, то, возможно, define здесь в тему - его обычно для чего-то подобного и используют альтернативный вариант - создание класса с методами для доставания разнообразных параметров, но это есть смысл городить, только если их в процессе работы будут менять, или хотя бы для того, чтобы не пересобирать программу каждый раз при изменении настроек если же это что-то вроде прототипа для локального использования, то, наверное, define - OK |