为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?

Why can't I use C++ Eigen (header only lib) in two console apps within the same MS VS solution?

本文关键字:应用 控制台 C++ 特征 两个 不能 MS 解决方案 VS 为什么      更新时间:2023-10-16

我用两个控制台应用程序项目制作了一个Microsoft可视化解决方案。我可以在一个项目中使用 Eigen 库,只需在属性中声明它,如下所示:

$(ProjectDir(Eigen\eigen3;

我可以使用像"Eigen::Vector3d"等库结构没有问题。 现在,当我尝试将仅标头库复制到第二个项目文件夹中并尝试为第二个项目文件夹设置相同的属性并使用结构时,我会收到编译错误。

然后,当我不将 Eigen 文件夹复制到第二个文件夹并简单地尝试从第二个文件夹引用第一个文件夹中时,我会收到另一组编译时错误。

$(SolutionDir(someproject1\Eigen\eigen3;

第二种情况下的错误是这样的:

C:\用户\Alam Syed\Documents\someProject2.h(11(: 错误 C2653: "特征":不是类或命名空间名称

C:\用户\阿拉姆 syed\documents\someproject2.h(11(: 错误 C2065: 'Vector3f': 未声明 标识符

C:\Users\Alam Syed\Documents\someProject2.h(11(: error C2923: 'std::vector': 'Vector3f' 不是有效的模板类型参数 对于参数"_Ty">

C:\users\Alam Syed\documents\someProject2.h(11(: 错误 C2903:"分配器":符号既不是类模板也不是 函数模板

C:\users\Alam Syed\documents\someProject2.h(11(: 错误 C3203:"分配器":无法使用非专用类模板 作为模板参数"_Alloc"的模板参数,应 实数类型

为什么在同一解决方案中有两个项目尝试在其项目文件夹中独立拥有自己的库是不行的?此外,为什么我不能将特征文件夹从一个引用到第一个?最后,我们如何绕过这个怪癖/设计问题?

我刚刚对此进行了测试,可以在一个解决方案中实现。

  • 已创建空解决方案
  • 添加了两个控制台项目
  • zip 中的特征标头复制到两个项目中的每一个中
  • 在第一个项目文件夹中将它们重命名为eigen1,在第二个项目文件夹中重命名为eigen2
  • 使用 Eigen 文档中的教程代码在每个项目中创建了两个.cpp文件
  • 在第一个项目中将($ProjectDir)eigen1设置为"其他包含目录",并且 第二个项目中($ProjectDir)eigen2
  • 检查构建的调试二进制文件是否引用了正确的特征标头 嵌入式调试信息

如果您不重命名特征文件夹,这甚至有效。

我只能想到两个原因,为什么你想这样做而不是使用common目录方法:

  • 每个项目都使用不同版本的库,或者您希望拥有 以后此选项的灵活性
  • 您想使用自定义版本的 特征(和/或其他库(应用您的 自己的补丁