60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|||||||||||
1 | |||||||||||
Множественное определение переменной19.05.2014, 00:22. Показов 3574. Ответов 15
Метки нет (Все метки)
Доброго времени суток.
Просидев n-ое кол-во часов, доделал считай проект и тут вылезли ошибки о multiple definition. Ругается на переменные, определённые в .h файле, в хэдере само собой присутствует конструкция #ifndef #define #endif. Поэтому не понятно почему ругается компилятор, ведь в случае повторного включения, переменные не будут созданы снова. Сделав переменные константами всё заработало, но мне неинтересно почему так. .h файл с переменными DataStructures.h
Case.h
0
|
19.05.2014, 00:22 | |
Ответы с готовыми решениями:
15
ООР множественное определение конструктора ошибка: множественное определение статического члена класса QtCreator ругается на множественное определение переменной Множественное определение |
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
19.05.2014, 00:35 [ТС] | 3 |
newbie666, это я когда const убирал случайно удалил, типы переменных правильно записаны
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
19.05.2014, 00:53 [ТС] | 5 |
Строка в которой создаётся переменная, пишет, что впервые создаётся в файле mainwindow.cpp. Но почему он пытается создать несколько раз эти переменные непонятно.
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|||||||||||||||||||||||||||||||
19.05.2014, 01:14 [ТС] | 7 | ||||||||||||||||||||||||||||||
newbie666, просто говорит ,что переменная уже была инициализирована в файле mainwindow.cpp
UIComponents
mainwindow.h
main.cpp
Добавлено через 5 минут Ещё такой вопрос возник. Почему может приложение падать при добавлении переменной в вектор. Необходим свой конструктор копирования? В строке собственно ошибка
Logic.cpp
Case.cpp
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
19.05.2014, 01:20 [ТС] | 9 |
newbie666, указывается открывающая фигурная скобка, что значит, что проблема где-то в создании объектов класса.
Не по теме: не вижу ничего смешного
0
|
19.05.2014, 02:33 | 10 |
alexey31415, всё просто. переменные нельзя определять в h-файлах, т.к. их определение будет дублироваться везде, где этот файл инклудится. Просто убери все переменные из своего h файла.
Добавлено через 1 минуту ... да, а константы вообще можно не убирать, а использовать вместо них енумы
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
20.05.2014, 02:45 [ТС] | 12 |
В смысле?У меня лишь один хедер с этими переменными, где бы я его не включил компилятор посмотрит не определена ли переменная DATA_STRUCTURES_H, если да, то не будет добавлять код из хедера.
0
|
20.05.2014, 02:59 | 13 |
alexey31415, ты включаешь хедер в 2 цпп-файла.
В двух цпп файдах объявляется по самостоятельной переменной. => ошибка! множественное определение переменной. Делай иначе, открой для себя ключевое слово extern!
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
20.05.2014, 03:16 [ТС] | 14 |
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
20.05.2014, 04:47 | 15 |
В том смысле, что конструкция:
защищает от можественных подключений этого хедера к одному файлу. Это же директивы препроцессора, который видит, в каждый момент времени, только один файл. Такая конструкция никак не помешает подключить этот хедер к нескольким .cpp, и ошибку, о множественных определениях (если есть определения в хедере), выдаст уже компоновщик, который видит все файлы. Поэтому и нельзя делать определения в хедерах, которые подключаются к нескольким файлам (исключение - шаблоны). Добавлено через 8 минут Л.Лафоре "ООП в С++", глава 13: "Многофайловые программы".
0
|
20.05.2014, 09:14 | 16 |
0
|
20.05.2014, 09:14 | |
20.05.2014, 09:14 | |
Помогаю со студенческими работами здесь
16
Определение переменной Определение переменной Циклическое определение переменной определение значение переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |