擅长:python、mysql、java
<p>问题是<code>FlatlandCBS</code>的构造函数无效。
根据<a href="https://en.cppreference.com/w/cpp/language/constructor" rel="nofollow noreferrer">cppreference</a>:</p>
<blockquote>
<p>Before the compound statement that forms the function body of the constructor begins executing, initialization of all direct bases, virtual bases, and non-static data members is finished. Member initializer list is the place where non-default initialization of these objects can be specified.</p>
</blockquote>
<p>您得到的错误-<code>error: no matching function for call to ‘boost::python::numpy::ndarray::ndarray()’</code>是编译器告诉您它试图使用默认的ndarray构造函数。这个类没有默认的构造函数,所以您需要在初始值设定项列表中指定一个不同的构造函数(就像您对<code>m_railEnv</code>所做的那样!)。这里最简单的解决方案是将<code>map</code>的初始化移到初始化器列表中,如下所示:</p>
<pre class="lang-cpp prettyprint-override"><code> FlatlandCBS(p::object railEnv) :
m_railEnv(railEnv),
map(
p::extract<np::ndarray>(
p::extract<p::object>(
railEnv.attr("distance_map")
).attr("get")()
)
)
{ }
</code></pre>
<p>这不是最漂亮的代码,但它应该能工作</p>