Задать вопрос
EvgenyProff
@EvgenyProff
Не знаю, как пользоваться Google

Как исправить ошибку линковая файлов С++ в VS 2017(LNK2005)?

Привет!
Возникла проблема в VS 2017 с ошибкой линкования файлов (LNK2005), прикреплю скриншоты для наглядности.
В проекте 3 файла:
  • MyForm.h - файл самой формы C++\CLI, здесь я делаю #include "source.cpp", что скорее всего и падает, также здесь использую методы взаимодействия с формой типа openFileDialog и т.д.
    spoiler
    5ae43dbb2f7b7003435962.jpeg5ae43dc33f59b774396348.jpeg

  • Source.cpp - основной скрипт на 1.3к строк, мне нужно в MyForm.h вызвать вызвать функцию void solve() {...}, которая работает только в пределах стандартных библиотек и самого Source.cpp, не вызывая ничего "изнутри", для простоты все закомментировал и во всем файле оставил:
    void solve() {
    //
    }
    spoiler
    5ae43ddd48cb6764306187.jpeg

  • MyForm.cpp - нужен только для определения точки входа в приложение, там ничего не происходит.
    spoiler
    5ae43e12a57d5011363197.jpeg


Возможно напутал с пространством имен или подключением, но если создать заголовок H1.h, где написать:
#include "source.cpp"
void solve();

- тоже не рабит(
В гугле нашел информацию про переопределение в нескольких файлах одной и той же функции, но у меня всего 1 файл с определением и подключаю его всего 1 раз;
Если мысль, что ошибка из-за того, что подключаю как-то так: Source.cpp -> MyForm.h -> MyForm.cpp...
Подскажите, как правильно!
  • Вопрос задан
  • 817 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
@assembled
1. В *.h файлах должны быть только заголовки функций и объявления глобальных переменных.

2. *.cpp файлы не пишут в #include'ах ( в них пишут только *.h ) , *.cpp компилируются отдельно и потом полученные объектные файлы линкуются вместе в один исполняемый.

3. Для избежания включения несколько раз одного и того же файла используйте #ifndef:
// файл MyForm.h
#ifndef __MYFORM__
#define __MYFORM__
// здесь содержимое файла
#endif
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы