无法声明双精度数组?

时间:2019-03-04 08:36:00

标签: python c++ arrays visual-studio

我正在使用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属性中缺少库或包含项,因为据我所知,该行具有正确的语法,而且人们没有报告此错误。我希望这对某人来说很容易解决!预先感谢。

1 个答案:

答案 0 :(得分:1)

显然,GitHub上的文件确实使用std::array,但不包含array standard header

包括它解决了这个问题。