1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
||||||
1 | ||||||
Функция уже определена в другом файле25.04.2013, 09:39. Просмотров 3431. Ответов 21
Метки нет Все метки)
(
Который день бьюсь и не могу найти ответа, подскажите, если знаете.
Есть sparseMatrix.h:
Но линковщик выдает ошибки: Код
1>support.obj : error LNK2005: "void __cdecl symbolicPart(class RowFormatMatrix const &,class RowFormatMatrix const &,class RowFormatMatrix &)" (?symbolicPart@@YAXABVRowFormatMatrix@@0AAV1@@Z) уже определен в main.obj 1>support.obj : error LNK2005: "void __cdecl numericalPart(class RowFormatMatrix const &,class RowFormatMatrix const &,class RowFormatMatrix &)" (?numericalPart@@YAXABVRowFormatMatrix@@0AAV1@@Z) уже определен в main.obj 1>support.obj : error LNK2005: "class RowFormatMatrix __cdecl operator+(class RowFormatMatrix const &,class RowFormatMatrix const &)" (??H@YA?AVRowFormatMatrix@@ABV0@0@Z) уже определен в main.obj 1>support.obj : error LNK2005: "void __cdecl enterUsualMatrix(class RowFormatMatrix &)" (?enterUsualMatrix@@YAXAAVRowFormatMatrix@@@Z) уже определен в main.obj 1>support.obj : error LNK2005: "void __cdecl enterRowFormatMatrix(class RowFormatMatrix &)" (?enterRowFormatMatrix@@YAXAAVRowFormatMatrix@@@Z) уже определен в main.obj 1>support.obj : error LNK2005: "void __cdecl printUsualMatrix(class RowFormatMatrix const &)" (?printUsualMatrix@@YAXABVRowFormatMatrix@@@Z) уже определен в main.obj
1
|
|
25.04.2013, 09:39 | |
Ошибка "Функция-член уже определена или объявлена"
Ошибка - "Функция _main уже определена" |
|
Модератор
3326 / 2111 / 339
Регистрация: 13.01.2012
Сообщений: 8,202
|
|
25.04.2013, 10:20 | 2 |
и где же она? у вас ее нет. тела функций определены в заголовке. заголовок не защищен от повторного включения. где тела компонентных функций класса вообще не ясно.
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
|
25.04.2013, 16:21 [ТС] | 3 |
Почему жу? на 1ой строчке #pragma once
Там только конструкторы, которые инициализируют.
0
|
Модератор
3326 / 2111 / 339
Регистрация: 13.01.2012
Сообщений: 8,202
|
||||||||||||||||
25.04.2013, 16:58 | 4 | |||||||||||||||
как правило защиту от повторного включения h-файлов делают следующим образом
Добавлено через 1 минуту +помещать конструкцию
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
|
25.04.2013, 17:13 [ТС] | 5 |
Visual Studio поддерживает и #pragma once. В других прогах в аналогичной ситуации нескольких включений все прекрасно работает с #pragma once. В любом случае, как я уже написал, использование ифндефов тоже не помогает.
Скорее всего забыл объявление удалить. В любом случае это никак не влияет Да, именно)
0
|
Модератор
3326 / 2111 / 339
Регистрация: 13.01.2012
Сообщений: 8,202
|
|
25.04.2013, 17:17 | 6 |
как видим не прекрасно. кроме того ваш h-файл проклянут пользователи других систем
не верю ![]() попробуйте сделать пустой cpp-файл соответствующий вашему h-файлу и включить его в проект
0
|
![]() 25215 / 15692 / 3352
Регистрация: 24.12.2010
Сообщений: 34,226
|
|
25.04.2013, 17:24 | 7 |
Ругается-то Линковщик...
В support.obj и main.obj одни и те же функции определены. Добавлено через 3 минуты Ну да! Они же у вас в хедере реализованы! Т.е. реализация попадает в оба obj-файла. Поставь перед реализациями online Добавлено через 1 минуту А еще лучше - вытащи их в отдельный cpp
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
||||||||||||||||
25.04.2013, 17:39 [ТС] | 8 | |||||||||||||||
Так вот как она попадает во второй файл? Там же защита стоит, он смотрит что этот хедер уже включен и не трогает его больше. Нет?
Даже растаскивание на файлы не помогает - уже пробывал вот так: sparseMatrix.h
Могу даже сам проект кинуть http://rghost.ru/45544528
0
|
![]() 25215 / 15692 / 3352
Регистрация: 24.12.2010
Сообщений: 34,226
|
|
25.04.2013, 17:50 | 9 |
Защита действует только в пределах одного cpp-файла.
Ты хоть представляешь, как препроцессор работает? Если нет - почитай. Тут на форуме есть хорошая прикрепленная статья от Evg Добавлено через 2 минуты https://www.cyberforum.ru/blogs/18334/blog100.html
1
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
|
25.04.2013, 18:38 [ТС] | 10 |
Вы хотите сказать, что если я подключаю один хедер к нескольким cpp-файлам, то у меня будет ругаться линковщик, потому что один и тот же кусок кода включается более одного раза? Если да, то это бред. Если нет, то я вас не понял.
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,477
|
||||||
25.04.2013, 18:49 | 11 | |||||
Вопрос некоректен
если у тебя одна и та же функция(переменная) реализована в разных модулях то линковщик будет ругаться и никакие защиты не помогут поэтому и делают реализацию в С файлах, а в заголовочных только объявление тогда точно реализация не попадет в другой объектный модуль если конечно сам не впихаешь
![]()
1
|
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
|
|||||||||||
25.04.2013, 18:51 | 12 | ||||||||||
SparseMatrix.h:
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,477
|
|||||||||||
25.04.2013, 18:56 | 13 | ||||||||||
что
на другие не действует препроцессор ничего не знает про другие файлы вот здесь маленкое сравнение http://ru.wikipedia.org/wiki/Pragma_once Добавлено через 2 минуты Это не критично, хотя удобно Имена могут быть любые
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
||||||||||||||||
25.04.2013, 19:20 [ТС] | 14 | |||||||||||||||
Ну ок, разделил, все по прежнему
sparseMatrix.h
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,477
|
|
25.04.2013, 19:40 | 15 |
UrbanLynx,
взял твой проект но поскольку у мена 2008 то взял только Сишные файлы и заголовки все прекрасно скомпилировалось попробуй почистить проект если нужно могу заслать проект который у меня получился
0
|
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
|
|
25.04.2013, 19:51 | 16 |
в SparseMatrix.cpp не нужно включать ничего кроме SparseMatrix.h. Все остальное подключается к SparseMatrix.h
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
|
25.04.2013, 20:01 [ТС] | 17 |
0
|
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 29
|
|
25.04.2013, 20:26 [ТС] | 19 |
Просто чудеса в решете, работает)
Кстати, отличие есть - у тебя хедеры размещены в файлах ресурсов, а не в заголовочных файлах. Зачем так?
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,477
|
|
25.04.2013, 20:37 | 20 |
я ничего не размещал
взял твой проект из 8 поста создал пустой проект скопировал туда твои main.cpp sparseMatrixRealisation.cpp support.cpp main.h sparseMatrix.h sparseMatrixRealisation.h support.h запустил на компиляцию и все даже не разбирался Добавлено через 1 минуту А понял про что ты это я когда подключал к проекту папки попутал даже сразу и не заметил ![]() Добавлено через 3 минуты если у тебя будут косяки с компиляцией ( а у студии такое бывает) и очистка проекта не помогает удали папки Debug Release и файл с расширением ncb и перезапусти компиляцию
0
|
25.04.2013, 20:37 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Функция не определена. Хотя определена. =) Переменная уже определена в Form_5.obj
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |