Когда я пытаюсь #include им, что это работает, и я могу видеть мои классы, но при попытке использовать их я получаю «неразрешенный внешний». Я не создал .dll или .lib, поэтому я действительно не знаю, что вызывает это.
То, что Вы не создали библиотеку именно причина почему вы получите ошибку. Компиляции в вашем новом проекте («*.cpp
файлов») включают заголовки для ваших классов и используют определения классов, но определения членов отсутствуют.
Например, предположим, что у вас есть файл с именем "c.h"
в старом проекте:
#ifndef C_H
#define C_H
class C
{
public:
C();
void f();
};
#endif
Некоторые *.cpp
файл в новом проекте включает в себя заголовок и использует класс:
#include "somepath/oldproject/c.h"
void someFunction()
{
C c;
c.f();
}
Этот компилируется отлично, но это приведет к ошибкам компоновщика, поскольку определения C::C
и C::f
будут отсутствовать.
Теперь, чистое решение это, конечно, не добавление somepath/oldproject/c.cpp
из старого проекта вашего нового проекта, хотя это было бы исправить ошибку компоновщика, но использовать подход библиотеки на основе. Превратите свои математические классы в проект библиотеки, назовем его «Math Utils», который создает файл *.lib
(как вы, кажется, в Windows), например math-utils.lib
. Добавьте путь include и release библиотеки к вашим глобальным путям include и library. Затем добавьте файл math-utils.lib
в зависимости от компоновщика нового проекта.
И изменить код в новом проекте:
#include <math-utils/c.h>
void someFunction()
{
C c;
c.f();
}
Сделайте то же самое в старом проекте! Вы получите три разных проекта. Два прикладных проекта и один проект библиотеки, первые два в зависимости от последнего.
Создание собственных библиотек в первый раз может быть немного пугающим, но выгоды стоят проблемы.
См. Также The Linker Is not a Magical Program.
«Я не создал .dll или .lib, поэтому я действительно не знаю, что вызывает это». Это не вызывает использование библиотеки. –
Возможно, вам захочется создать отдельный проект библиотеки для общих частей, а затем использовать его в других проектах. –
Я подозреваю, что все эти «нерешенные внешние» находятся в файлах реализации .cpp, которые вы никогда не добавляли в свой новый проект. И у вас была бы проблема с * идентичным * в вашем исходном проекте, если бы вы просто удалили файлы .cpp. Вы * можете * обмениваться исходными файлами по нескольким проектам, но это означает, что dll/lib, скорее всего, находится в меню, а не реплицирует скомпилированные единицы перевода по всему месту. – WhozCraig