У меня есть два проекта Visual C++ (в Visual Studio 2008), один из них имеет пользовательский интерфейс, который разработан с qt 4.6.2 (и проект в 32-битной конфигурации), а другой - консольное приложение (с 64-битная конфигурация) оба находятся в одном решении.
Поэтому мне нужно использовать некоторые классы консольного приложения в другом.
Скажем, консольное приложение имеет один класс:
class a
{
public:
void read();
void write();
}
поэтому я добавляю эту папку проекта в дополнительные зависимости другого проекта, который должен использовать класс a, и пытается использовать его так:
#include "a.h"
a myClass;
myClass.write();
когда я компилирую решение, оно дает Error LNK2019: Unresolved External Symbol
.
Так что я делаю что-то неправильно или это связано с другой конфигурацией проектов?
Благодарю.
Поскольку @PeterR сказал, что вы также можете включить *.cpp файлы во второй проект. Фактически, для второго проекта необходимо поведение класса, а не только его заголовок, и вы можете передать его компилятору либо в виде исходного кода, либо в виде скомпилированной библиотеки.
Но я лично скомпилировал код в статической библиотеке.
Я знаю, что это может показаться излишним на первый взгляд, но это займет всего 10 минут в разумной среде IDE, и вы можете его изменить, изменить в проекте A, не затрагивая проект B, но также использовать более новую версию в проекте B, когда в конце концов вы будет чувствовать себя. Вам не нужно беспокоиться, что кто-то другой меняет вещи, не предупредив вас и так далее.
Может быть десять потраченных впустую минут, но также может сделать разницу в будущем.
В настоящее время мне жаль, что я не делал этого пару лет назад в небольших проектах, которые не предвидели стать тем, кем они стали!
После компиляции в виде lib вы будете иметь как обычно с libs, чтобы включить файл.h и связать файл.a
У вас мало возможностей для этого. Это зависит от того, что эти два проекта.
1) Они оба приложения (скомпилированы в *.exe):
a
классе (возможно, названный a.cpp
) → это точно тот же самый файл, который прилагается к QT проект.2) Проект QT - это библиотека (статическая [.lib] или динамическая [.dll]).
Используйте решение, указанное выше. В случае динамической библиотеки, если вы экспортируете класс a
или некоторые из его членов (и эти члены отмечены некоторым изменением макроса declspec), убедитесь, что этот макрос будет разрешен для пустого выражения.
Добавьте QT-проект (пусть его называют QTP) в качестве зависимости. Указывать заголовок для a
(#include "ah"
) и использовать a
тот же самый способ, которым Вы делаете это сейчас. Кроме того, откройте свойства QTP и скопируйте содержимое "General → Output directory". Затем перейдите в свойства приложения консоли и выберите "Linker → General", затем вставьте скопированный путь в "Дополнительные каталоги библиотек". В "Linker → Input" добавьте имя вывода QTP в "Дополнительные зависимости".
Вам необходимо включить в проект один из следующих вариантов, чтобы связать его: