Почему я не могу использовать C ++ Eigen (только заголовок lib) в двух консольных приложениях в рамках одного решения MS VS? - PullRequest
0 голосов
/ 18 сентября 2018

Я разработал визуальное решение Microsoft с двумя проектами консольных приложений.Я могу использовать библиотеку Eigen в одном проекте, просто объявив ее в свойствах следующим образом:

$ (ProjectDir) Eigen \ eigen3;

Я могу использовать библиотечные структурыкак "Eigen :: Vector3d" и т.д. без проблем.Теперь, когда я пытаюсь скопировать только заголовочную библиотеку во вторую папку проекта и пытаюсь установить то же свойство для второй, и использую структуру, я получаю ошибки компиляции.

Тогда, когда я не делаюскопируйте папку Eigen во вторую и просто попробуйте обратиться ко второй папке в первой, я получаю другой набор ошибок времени компиляции.

$ (SolutionDir) someproject1 \ Eigen \ eigen3;

Ошибки во втором случае выглядят так:

c: \ users \alam syed \ documents \ someproject2.h (11): ошибка C2653: 'Eigen': не является именем класса или пространства имен

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибкаC2065: 'Vector3f': необъявленный идентификатор

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибка C2923: 'std :: vector': 'Vector3f' не является допустимым типом шаблонааргумент для параметра '_Ty'

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибка C2903: 'allocator': символ не является ни шаблоном класса, ни шаблоном функции

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибка C3203: «распределитель»: шаблон неспециализированного класса нельзя использовать в качестве аргумента шаблона для параметра шаблона «_Alloc», ожидаемый реальный тип

Почему не нормально, чтобы два проекта в одном решении пытались независимо иметь свои собственные библиотеки в своем проекте?эрс?Далее, почему я не могу отослать папку Eigen от одного к первому?Наконец, как мы можем обойти эту причудливую / нестандартную проблему?

1 Ответ

0 голосов
/ 19 сентября 2018

Я только что проверил это, и это возможно в одном решении.

  • создал пустое решение
  • добавил два консольных проекта
  • скопировал собственные заголовки из zip в каждыйиз двух проектов
  • переименовал их в eigen1 в первой папке проекта и eigen2 во второй папке проекта
  • создал два файла .cpp в каждом из проектов, используя учебный код изeigen docs
  • установить ($ProjectDir)eigen1 как "Дополнительные каталоги включения" в первом проекте и ($ProjectDir)eigen2 во втором проекте
  • проверил встроенные отладочные файлы, если они ссылаются на правильные собственные заголовки ввстроенная информация отладки

Это работает даже если вы не переименовываете собственные папки.

Я могу думать только о двух причинах, почему вы захотите сделать это вместо использования common подход к каталогу:

  • каждый из проектов использует свою версию libs или вы хотите иметь гибкость для этой опции позже
  • вы хотите использовать cuстомизированные версии eigen (и / или других библиотек), использующие ваши собственные патчи
...