Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> error LNK2005 xxx already defined in Data.obj, Поясните причину… 
:(
    Опции темы
Kolia
Дата 20.4.2005, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Программу компилит, а линковать не хочет. Вот какой еррор выкидывает.
Код

FileDB.obj : error LNK2005: "private: void __thiscall CFileData::OpenFileForWrite(void)" (?OpenFileForWrite@CFileData@@AAEXXZ) already defined in Data.obj


Это я только один показал, а таких куча.

Из истории вопроса… Писал я программу. Классы описывал в разных хедер файлах. Методы класса описывал в том же хедере. Не в самом теле класса, а ниже:
Код

class CFileData
{
...
void SetFileName(string filename);
...
};
void CFileData::SetFileName(string filename)
{
...
}


Таким образом программа исправно компилировалась и т.п., то есть РАБОТАЛА (проверено). Думаю, дай ка реализацию методов в отдельный файл для каждого класса помещу

Код

//File.h
class CFileData
{
...
};

//File.cpp
#include "File.h"
void CFileData::SetFileName(string filename)
{
...
}


Казалось копи-пасте, ан нет, что-то не так. smile

В MSDN‘е нашел инфу об этой ошибке, только толком ничего не понял. Может кто сталкивался, знает кто тут собака закопана и как ее откапать.
Заранее благодорствую smile
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Alastis
Дата 20.4.2005, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



А есть такая директива в хедере:
Код

#pragma once

?
ну или
Код

#ifndef ... #define ... #endif

если компилер не майкрософтовский...

еще такая беда бывает, когда пытаются подключить где то в других файлах cpp файлsmile еще когда в cpp файлах описывают inline функции

еще можно в Linker/Command Line/Additional Options указать /FORCE:MULTIPLE, но это явно неудачное решение проблемы...




--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Fire-Plug
Дата 20.4.2005, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2005

Репутация: -1
Всего: 0



Скорее всего ошибка из-за C&P технологии, т.к. судя по сообщению линкера ф-ция CFileData::OpenFileForWrite(void) уже имеется в объектном файле Data.obj. Попасть туда она могла если:
1) реализация метода осталась в каком-то из заголовочных файлов, к-рый включается и в FileDB.cpp и в Data.cpp.
2) Оба cpp-файла содержат реализацию метода CFileData::OpenFileForWrite(void)
3) файл Data.obj помещен в статич. библиотеку, и одновременно исх. код CFileData::OpenFileForWrite находится в модуле FileDB.cpp. (хотя, судя по описанию - в данном случае этого нет)

inline - вряд ли, т.к. inline-ф-ция должна быть заменена соотв. объектным кодом, после чего это уже не ф-ция в смысле редактирования связей.
Директива #pragma once (или #ifndef...) влияет только на компиляцию данного cpp-файла. Если в заголовке сидит реализация ф-ции, то в другом объектном файле, исх. код к-рого включает данный заголовок, эта ф-ция также возникнет.
Добавлено @ 09:02
Ну, бывают подобные проблемы в VC, связанные с порядком подключения библиотек. Как сообщает MSDN:
Цитата
LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries


--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Kolia
Дата 20.4.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Чудеса да и только. Сегодня утром открыл этот самый проект, так он еррор только по одному поводу выбил. У меня в хедере статик переменная была инициализована...

Ну с этим понятно, забыл тоже в срр кинуть. Но какого ... он раньше столько ерроров кидал? А тут закрыл-открыл, и ерроры исчезли...
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Alastis
Дата 21.4.2005, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



ну так иногда и компьютер глючит по страшному, а перегрузишь и все путемsmile а ты случайно полный rebuild не делал?


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Kolia
Дата 23.4.2005, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Цитата(Alastis @ 21.4.2005, 05:44)
ну так иногда и компьютер глючит по страшному, а перегрузишь и все путемsmile а ты случайно полный rebuild не делал?

Делал. Не помогало smile Микрософт скучать не заставит smile
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.