我正在使用Python 2.7,C ++和Visual Studio 2017。
我今天正在使用这个库https://github.com/lava/matplotlib-cpp
matplotlibcpp.h具有多个方法定义。在第1469行中,他们这样定义内联ginput:
inline std::vector<std::array<double, 2>> ginput(const int numClicks = 1, const std::map<std::string, std::string>& keywords = {}){
PyObject *args = PyTuple_New(1);
PyTuple_SetItem(args, 0, PyLong_FromLong(numClicks));
// construct keyword args
PyObject* kwargs = PyDict_New();
for(std::map<std::string, std::string>::const_iterator it = keywords.begin(); it != keywords.end(); ++it)
{
PyDict_SetItemString(kwargs, it->first.c_str(), PyUnicode_FromString(it->second.c_str()));
}
PyObject* res = PyObject_Call(
detail::_interpreter::get().s_python_function_ginput, args, kwargs);
Py_DECREF(kwargs);
Py_DECREF(args);
if (!res) throw std::runtime_error("Call to ginput() failed.");
const size_t len = PyList_Size(res);
std::vector<std::array<double, 2>> out;
out.reserve(len);
std::array<double, 2> position;
for (size_t i = 0; i < len; i++) {
PyObject *current = PyList_GetItem(res, i);
position[0] = PyFloat_AsDouble(PyTuple_GetItem(current, 0));
position[1] = PyFloat_AsDouble(PyTuple_GetItem(current, 1));
out.push_back(position);
}
Py_DECREF(res);
return out;
}
我在std::array<double, 2> position;
行中遇到了问题。我收到一个错误:
不允许使用具体类型
这是我尝试编译时的输出。它是西班牙语。
> 1>------ Operación Compilar iniciada: proyecto: ConsoleApplication2, configuración: Release x64 ------
1>mainAux.cpp
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(595): warning C4244: 'argumento': conversión de 'const double' a 'long'; posible pérdida de datos
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1491): error C2079: 'position' utiliza class 'std::array<double,2>' sin definir
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1495): error C2109: el subíndice requiere una matriz o tipo de puntero
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1496): error C2109: el subíndice requiere una matriz o tipo de puntero
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1497): error C2664: 'void std::vector<std::array<double,2>,std::allocator<_Ty>>::push_back(_Ty &&)': el argumento 1 no puede convertirse de 'int' a 'const _Ty &'
1> with
1> [
1> _Ty=std::array<double,2>
1> ]
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1497): note: Razón: no se puede realizar la conversión de 'int' a 'const _Ty'
1> with
1> [
1> _Ty=std::array<double,2>
1> ]
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1497): note: Uso del tipo no definido 'std::array<double,2>'
1>c:\users\lraulmn\source\repos\consoleapplication2\consoleapplication2\matplotlibcpp.h(1469): note: vea la declaración de 'std::array<double,2>'
1>Compilación del proyecto "ConsoleApplication2.vcxproj" terminada -- ERROR.
========== Compilar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========
我还是会放一个screenshot,以便您可以更好地阅读。
我认为我在Visual Studio属性中缺少库或包含项,因为据我所知,该行具有正确的语法,而且人们没有报告此错误。我希望这对某人来说很容易解决!预先感谢。