在 Visual Studio 2012 中使用 dlib
Posted
技术标签:
【中文标题】在 Visual Studio 2012 中使用 dlib【英文标题】:Use dlib in Visual studio 2012 【发布时间】:2014-11-20 07:50:21 【问题描述】:我想在我的项目中使用优化算法 lbfgs,但我不想自己编写代码。所以我发现Dlib
是一个不错的选择。
http://dlib.net/compile.html 是一个很好的库。我下载了它。我使用的是 windows 7 和 visual studio 2012。如果我创建一个新的 win 32 控制台项目并将 property->configuration properties->VC++ Directories->Include Directories
设置为 Dlib
(dlib-18.10/) 的路径。
它运行良好,这意味着我可以运行示例。
但是当我将它添加到我的项目中时。我出现错误。(error : "vector" is ambiguous
)
我猜可能是因为我包含它的方式。
在Dlib
的文件上写着,
Again, note that you should not add the dlib folder itself to your compiler's include path. Doing so will cause the build to fail because of name collisions (such as dlib/string.h and string.h from the standard library). Instead you should add the folder that contains the dlib folder to your include search path and then use include statements of the form #include <dlib/queue.h>. This will ensure that everything builds correctly.
但我不清楚上面的意思。我用谷歌搜索了the Visual Studio search path (Tools / Options / Projects and Solutions / VC++ Directories).
。但在我的项目中,这是不可编辑的。
我只在 dlib 中使用 optimization.h。如果我删除'using namespace dlib;',然后'typedef matrix column_vector;'则错误是matrix
is not a template。如果我继续“使用命名空间 dlib;”我有错误“向量”不明确`。
#include <dlib/optimization.h>
#include <iostream>
using namespace std;
using namespace dlib;
// ----------------------------------------------------------------------------------------
// In dlib, the general purpose solvers optimize functions that take a column
// vector as input and return a double. So here we make a typedef for a
// variable length column vector of doubles. This is the type we will use to
// represent the input to our objective functions which we will be minimizing.
typedef matrix<double,0,1> column_vector;
【问题讨论】:
你不应该指向所有标题所在的目录,而是向上一步。然后,您将包含标题作为#includevector
吗?#include <vector.h>
。假设您想要位于几何图形下的 dlib 向量。那么你应该包括#include <dlib/geometry/vector.h>
。每当你想使用它们时,你都应该指定命名空间,因为这也会让编译器感到困惑。如果您的程序中同时使用了 std 和 dlib 命名空间,则无论何时使用它们都应该说 std::vector
或 dlib::vector
。希望有帮助!
@HalilKaskavalci,谢谢。这有帮助。我希望这至少可以工作。但它是手动的。
我也发布了答案。享受编码!
【参考方案1】:
正如文档所述,包含目录应该是您下载的 zip 的根目录。然后你包括#include <dlib/vector.h>
。但是,由于 vector 也是在 std 的命名空间下定义的,因此您应该明确指出您将使用哪个命名空间的 STL。
如果你想使用 std::vector,
#include <vector.h>
然后将其用作
std::vector<int> stdVar;
同样,对于 dlib,
#include <dlib/geometry/vector
然后将其用作
dlib::vector<int> dLibVar;
如果您不像 dlib 那样频繁使用 using namespace std
,也可以删除它。那么你引用的每个 STL 都将是 dlib。如果你想要标准,只需输入std::vector
。
【讨论】:
我更频繁地使用 std::vector。我更新了我的问题以提供更多详细信息。 包含包含路径的方式是正确的。基本上,您应该通过指定命名空间来消除歧义。如果要删除 dlib,则在引用 dlib STL 时应包含 dlib::matrix。我没听错你的问题吗?【参考方案2】:using namespace std;
using namespace dlib;
#define vector std::vector
谨慎使用
【讨论】:
以上是关于在 Visual Studio 2012 中使用 dlib的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2012 中使用 Web 参考
Visual Studio 2012 与 Visual Studio 2005 中的小程序慢得多
使用TFS 2010在Visual Studio 2012中进行代码审查