【发布时间】:2019-07-25 12:54:31
【问题描述】:
我正在使用 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 属性中缺少库或包含,因为据我所知,该行具有正确的语法,而且人们没有报告此错误。我希望这对某人来说很容易解决!提前致谢。
【问题讨论】:
-
我假设 "utiliza class 'std::array
' sin definir" 意味着您正在尝试使用类 std::array而没有先定义它,所以您应该包括定义它的标准头文件。尝试包含<array>标头,如shown in the docs。 -
字面意思。因为它在其他地方工作,比如在我认为它被包括在内之前的线条。将其作为评论发布,以便我验证您的解决方案。谢谢! @ForceBru
标签: python c++ arrays visual-studio