2013-05-11 2 views
0

Я знаю, что эти ошибки в заголовке ничего нового, но в этом созвездии у меня здесь довольно странно, и я не нахожу решение, которое помогает. Поэтому позвольте мне объяснить.повышение классов экспозиции LNK2019/модуль не определяет функцию init

Я работаю с 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 

Это так странно, что это ошибка компоновщика, потому что я triple проверил и сравнил настройки с моим проектом с помощью простой функции greet. Возможно, мне придется изменить некоторые настройки при попытке открыть классы? Или я делаю что-то ужасно неправильно? Какие-либо предложения?

Привет Chris

ответ

0

Вы пропускаете имя класса:

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

OMG, спасибо, я чувствую себя довольно глупо сейчас ... –