Я использую SWIG для вызова программы на C ++ из python с тремя аргументами. Последний аргумент также используется для возвращаемого значения.
analysis.i
%module coverage
%{
//#include "../SeqMCMC/src/funeval_base.hpp"
#include "coverage.hpp"
%}
%include "std_vector.i"
void coverage(std::vector<double> *Pypar, std::vector<std::vector<double> > *Pyxpass, std::vector<std::vector<double> > *Pyypass);
coverage.hpp
#ifndef _COVERAGE_
#define _COVERAGE_
#include<vector>
void coverage(std::vector<double> *Pypar,
std::vector<std::vector<double>> *Pyxpass,
std::vector<std::vector<double>> *Pyypass);
#endif
coverage.cpp
#include "isofuneval.hpp"
#include "funeval_base.hpp"
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
void coverage (std::vector<double> *Pypar,
std::vector<std::vector<double>> *Pyxpass,
std::vector<std::vector<double>> *Pyypass){
//Convert the par, xpass and ypass vectors as ublas
boost::numeric::ublas::vector<double> par((*Pypar).size());
boost::numeric::ublas::matrix<double> xpass((*Pyxpass).size(),(*Pyxpass)[0].size());
boost::numeric::ublas::matrix<double> ypass((*Pyypass).size(),(*Pyypass)[0].size());
for (size_t i = 0; i < (*Pypar).size(); i++){
par(i) = (*Pypar)[i];
}
for (size_t i = 0; i < (*Pyxpass).size(); i++){
for (size_t j = 0; j <(*Pyxpass)[0].size(); j++){
xpass(i,j) = (*Pyxpass)[i][j] ;}
}
for (size_t i = 0; i < (*Pyypass).size(); i++){
for (size_t j = 0; j <(*Pyypass)[0].size(); j++){
ypass(i,j) = (*Pyypass)[i][j];}
}
isofuneval CoveragePlot;
CoveragePlot.function(par, xpass, ypass); //These should actually be references and or pointers if I expect ypass to have the result
for (size_t i = 0; i < (*Pyypass).size(); i++){
for (size_t j = 0; j <(*Pyypass)[0].size(); j++){
(*Pyypass)[i][j] = ypass(i,j) ;
}
}
}
Он компилируется, и модуль загружается, но когда я его запускаю:
import _coverage as coverage
coverage.coverage([3, 2, 1 ],[[4, 8423] , [4, 12] ],[[24,234 ], [23, 23] ])
Я получаю следующую ошибку:
Ошибка типа: в методе 'cover', аргумент 1 типа 'std :: vector > *'