使用python setup.py安装时遇到编译错误,错误如下:
: error C2039: 'data' : is not a member of 'std::vector<_Ty>'
with
[
_Ty=unsigned int
]
Microsoft Visual有一个用于Python的VC++,它使用Visual C++2008,它不支持C++11(我认为这是该部分代码工作所必需的。
std::vector<unsigned> tab((m + 1) * 2);
unsigned *cur = tab.data(), *prev = tab.data() + m + 1;
对于这部分代码,或者强制python安装使用MV C++2015,有什么变通方法吗。
整个代码在这里:https://github.com/semanticize/leven/blob/master/leven/levenshtein_impl.h
std::vector
保证连续存储其数据,因此您只需获取其第一个元素的地址:
unsigned *cur = &tab[0], *prev = &tab[0] + m + 1;
或者可能会更清楚:
unsigned *cur = &tab[0];
unsigned *prev = cur + m + 1;
您可以使用:而不是vector::data()
&tab[0] // or &tab.front()
以获取指向矢量数据的指针。因此,您的代码将如下所示:
std::vector<unsigned> tab((m + 1) * 2);
unsigned *cur = &tab[0], *prev = &tab[0] + m + 1;
&tab[0]
的一个问题是,如果选项卡为空,那么这将导致"未定义的行为",至少在Visual Studio下会崩溃。在VS2015下,对空向量调用data()会得到nullptr。如果向量为空,std::vector::data()应该返回什么?这应该是未指明的行为。在您的代码矢量中,看起来它在那个位置永远不应该是空的,但为了确保您可以使用以下代码来确保:
unsigned *cur = (tab.empty() ? NULL : &tab[0]), *prev = (tab.empty() ? NULL : &tab[0]) + m + 1;