2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Error LNK2005 MS VS C++ Совсем непонятно.
Сообщение28.07.2020, 18:26 
Аватара пользователя


05/06/08
470
Линковщик выдает ошибку:
Код:
Severity   Code   Description   Project   File   Line   Suppression State
Error   LNK2005   "class std::vector<unsigned char,class std::allocator<unsigned char> > __cdecl Read_file_binary_(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?Read_file_binary_@@YA?AV?$vector@EV?$allocator@E@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z) already defined in segment.obj   segment

Упомянутая переменная Read_file_binary_
Определена в header file:
Код:
std::vector<uint8_t> Read_file_binary_(const std::string & pathToFile)
{
    std::ifstream file(pathToFile, std::ios::binary);
    std::vector<uint8_t> fileBufferBytes;

    if (file.is_open())
    {
        file.seekg(0, std::ios::end);
        size_t sizeBytes = file.tellg();
        file.seekg(0, std::ios::beg);
        fileBufferBytes.resize(sizeBytes);
        if (file.read((char*)fileBufferBytes.data(), sizeBytes)) return fileBufferBytes;
    }
    else throw std::runtime_error("could not open binary ifstream to path " + pathToFile);
    return fileBufferBytes;
}


И используется всего раз:

Код:
if (preload_into_memory)
      {
         byte_buffer = Read_file_binary_(filepath);
         file_stream.reset(new memory_stream((char*)byte_buffer.data(), byte_buffer.size()));
      }


Судя по хелпу имя якобы упоминается два раза. Я как бы изменял несколько раз на всякий случай это имя, но с тем же успехом.
Кроме того. В другом проекте, правда более простом, никаких накладок не было.
Помогите люди добрые разобраться.

-- Вт июл 28, 2020 19:58:40 --

Примерно понял. Если кому интересно. Переставил опреределение читающей функии
std::vector<uint8_t> Read_file_binary_(const std::string & pathToFile){.....}
из хедера в корневой файл (main.cpp).
А так как мжду инклюдом #include "tinyply.h"
и читающим файлы фрагментом теперь появляется магическая тройка
extern "C" { FILE _iob[3] = {__acrt_iob_func(0), __acrt_iob_func(0), __acrt_iob_func(0)}; }
То с чтением файлов все теперь в порядке.

 Профиль  
                  
 
 Re: Error LNK2005 MS VS C++ Совсем непонятно.
Сообщение28.07.2020, 19:43 


09/05/16
138
MGM в сообщении #1476406 писал(а):
Определена в header file:


Не гарантирую, но может помочь приписать к этой функции inline, чтобы компилятору стало понятно, что множественные определения этой функции нужно слить в одно. Либо вынести определение функции в *.cpp файл, а в заголовочном файле оставить только объявление. Тогда inline, конечно, нужно убрать.

 Профиль  
                  
 
 Re: Error LNK2005 MS VS C++ Совсем непонятно.
Сообщение28.07.2020, 23:00 
Заслуженный участник


01/06/15
1149
С.-Петербург
MGM в сообщении #1476406 писал(а):
И используется всего раз
У Вас в header-файле исполняемый код. Функция используется всего раз, а сам h-файл инклюдится больше одного раза. Отсюда и ошибка. Ничего удивительного.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group