2013-05-11 66 views
0

我知道标题中的这些错误并不是什么新鲜事,但在这个星座中,我在这里很奇怪,我没有找到有助于解决问题的解决方案。所以让我解释一下。boost暴露类LNK2019 /模块没有定义初始函数

我正在使用boost.python,Visual Studio 2012和开发人员网站的教程。因此,正如我终于修复了所有连接器问题和进口我得到的第一个教程工作:

char const* greet() 
{ 
    return "hello, world"; 
} 

#include <boost/python.hpp> 
using namespace boost::python; 

BOOST_PYTHON_MODULE(hello_ext) 
{ 
    using namespace boost::python; 
    def("greet", greet); 
} 

工作正常。

现在我正在尝试与一个类的整个事情,我可以在python中创建一个对象。 Ofc我从具有默认构造函数的更简单的示例开始。这里是我的代码:

World.h

#pragma once 
class World 
{ 
public: 
    void greet(); 
}; 

World.cpp

#include "World.h" 
#include <stdio.h> 

void greet(){ 
    printf("hello"); 
} 


#include <boost\python.hpp> 
using namespace boost::python; 

BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
     .def("greet", &World::greet) 
     ; 
} 

如果我现在尝试构建它,我得到一个错误LNK2019,我收到了,而有错误的接头或导入简单的问候方法项目。什么让我感到头疼的是我用我的类曝光例子相同的项目设置(我无法解释为什么我再次得到一个链接器错误)。当我尝试只露出方法打招呼方式:

def("greet", greet); 
在BOOST_PYTHON_MODULE块

,我可以建立,但在Python得到一个导入错误,例如:

module does not define init function 

它是如此奇怪的是,这是一个链接器错误,因为我三重检查并使用简单的问候函数将设置与我的项目进行了比较。试图公开课程时,我可能需要更改一些设置吗?还是我在做一些可怕的错误?有什么建议么?

问候 克里斯

回答

0

你缺少类的名称:

void World::greet(){ 
    printf("hello"); 
} 
+0

妈呀,谢谢你,我现在感觉相当傻... – 2013-05-11 12:28:18