Используйте один класс в другом проекте в том же решении, но в другой конфигурации

0

У меня есть два проекта 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.

Так что я делаю что-то неправильно или это связано с другой конфигурацией проектов?

Благодарю.

  • 0
    Помимо включений, вы ссылаетесь на библиотеку - stackoverflow.com/a/12574400/673730 ?
  • 0
    Спасибо за ответ. У меня нет файлов lib, только заголовки для первого проекта. Так что мне нужно добавить что-нибудь и для компоновщика?
Теги:
visual-studio
linker
visual-c++

3 ответа

0

Поскольку @PeterR сказал, что вы также можете включить *.cpp файлы во второй проект. Фактически, для второго проекта необходимо поведение класса, а не только его заголовок, и вы можете передать его компилятору либо в виде исходного кода, либо в виде скомпилированной библиотеки.

Но я лично скомпилировал код в статической библиотеке.

Я знаю, что это может показаться излишним на первый взгляд, но это займет всего 10 минут в разумной среде IDE, и вы можете его изменить, изменить в проекте A, не затрагивая проект B, но также использовать более новую версию в проекте B, когда в конце концов вы будет чувствовать себя. Вам не нужно беспокоиться, что кто-то другой меняет вещи, не предупредив вас и так далее.

Может быть десять потраченных впустую минут, но также может сделать разницу в будущем.

В настоящее время мне жаль, что я не делал этого пару лет назад в небольших проектах, которые не предвидели стать тем, кем они стали!

После компиляции в виде lib вы будете иметь как обычно с libs, чтобы включить файл.h и связать файл.a

0

У вас мало возможностей для этого. Это зависит от того, что эти два проекта.

1) Они оба приложения (скомпилированы в *.exe):

  • Прикрепить исходный файл. В консольном приложении у вас есть фильтр с именем "Исходные файлы", где прикреплены файлы *.c и *.cpp. Нажмите на этот фильтр с ПКМ и выберите "Add → Existing пункт" и выберите.c/.cpp файл, который содержит определение 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 в "Дополнительные зависимости".

0

Вам необходимо включить в проект один из следующих вариантов, чтобы связать его:

  1. a.cpp, или
  2. Библиотека (*.lib), которая скомпилировала файл a.cpp (это также можно использовать в сочетании с dll)
  • 0
    У меня нет lib или dll в первом проекте. Только заголовочные файлы и, очевидно, файлы реализации (cpp's). Что вы подразумеваете под связыванием cpp?
  • 0
    Затем вам нужно включить файлы * .cpp во второй проект. Для этого вы можете использовать общую папку, а не выбирать файлы из другого проекта.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню