2013-05-11 63 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

相關問題