1

我想在我的项目中使用优化算法 lbfgs,但我不想自己编写代码。所以我发现Dlib是一个不错的选择。

http://dlib.net/compile.html是一个很好的库。我下载了它。我使用 Windows 7 和 Visual Studio 2012。如果我创建一个新的 Win 32 控制台项目并设置property->configuration properties->VC++ Directories->Include DirectoriesDlib(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不是模板。如果我继续“使用命名空间 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;
4

2 回答 2

1

如文档所述,包含目录应该是您下载的 zip 的根目录。然后你包括 as #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;

using namespace std如果你不像 dlib 那样频繁地使用它,你也可以删除它。那么你引用的每个 STL 都将是 dlib。如果你想要标准,只需输入std::vector.

于 2014-09-25T14:18:57.187 回答
0
using namespace std;
using namespace dlib;
#define vector std::vector

谨慎使用

于 2017-10-21T04:02:31.533 回答