Используйте dlib в Visual studio 2012

Я хочу использовать алгоритм оптимизации 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. Если я удаляю ‘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;

1

Решение

Как говорится в документации, каталог include должен быть корневым каталогом загруженного zip-архива. Затем вы включаете как #include <dlib/vector.h>, Однако, так как вектор также определен в пространстве имен 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,

1

Другие решения

using namespace std;
using namespace dlib;
#define vector std::vector

используйте с осторожностью

0

По вопросам рекламы [email protected]