2011-08-05 13 views
7

मेरे पास सीखने के लिए अच्छे सी ++ उदाहरणों की कमी के कारण एसडब्ल्यूआईजी के साथ एक समय का नरक है। अंततः मुझे एसडब्ल्यूआईजी के साथ संकलन करने के लिए अपना पहला कार्यक्रम मिला, लेकिन मुझे इसे चलाने में परेशानी हो रही है। मुझे सिर्फ कोड का अधिकार मिलता है ...एसडब्ल्यूआईजी: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'डेकलिस्ट'

setup.py:

#!/usr/bin/env python 

""" 
setup.py file for SWIG example 
""" 

from distutils.core import setup, Extension 


decklist_module = Extension('_decklist', 
          sources=['decklist_wrap.cxx', 'decklist.cpp'], 
          ) 

setup (name = 'decklist', 
     version = '0.1', 
     author  = "Me", 
     description = """Testing!""", 
     ext_modules = [decklist_module], 
     py_modules = ["decklist"], 
     ) 

decklist.hpp:

#include <boost/unordered_map.hpp> 



class DeckList{ 
    private: 
     boost::unordered_map<std::string, int> mainBoard; 
     boost::unordered_map<std::string, int> sideBoard; 
    public: 
     void addCard(std::string name, int cardCount); 
     int getCount(std::string cardName); 
     DeckList(); 
     ~DeckList(); 

}; 

decklist.cpp:

#ifndef DECKLIST_H 
#define DECKLIST_H 
#include "decklist.hpp" 
#include <stdio.h> 

DeckList::DeckList(){ 

} 

void DeckList::addCard(std::string cardName, int cardCount){ 
    mainBoard[cardName] = cardCount; 
} 

int DeckList::getCount(std::string cardName){ 
    return mainBoard[cardName]; 
} 

#endif  

decklist। i:

//decklist.i 
%module decklist 
%{ 
    #include "decklist.hpp" 
%} 
#include "decklist.hpp" 

अब टर्मिनल (मैं Ubuntu Natty Narwhal पर हूँ) पर, मैं निम्नलिखित दो आदेशों को चलाने:

swig -python -c++ decklist.i 
python setup.py build_ext --inplace 

दूसरा मेरा पीछा प्रतिक्रिया देता है:

running build_ext 
building '_decklist' extension 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c decklist_wrap.cxx -o build/temp.linux-x86_64-2.7/decklist_wrap.o 
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++ 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c decklist.cpp -o build/temp.linux-x86_64-2.7/decklist.o 
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++ 
g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-x86_64-2.7/decklist_wrap.o build/temp.linux-x86_64-2.7/decklist.o -o /home/aespiel1/deck/_decklist.so 

लेकिन मैं के साथ हवा :

 
decklist.cpp 
decklist.hpp 
decklist.i 
decklist.py 
decklist.pyc 
_decklist.so 
decklist_wrap.cxx 
setup.py 

और दोनों decklist_wrap और decklist fil के लिए .o फाइलों के साथ निर्माण फ़ोल्डर तों।

अगर मैं बेकार में अजगर चलाने के लिए और इस निर्देशिका में स्विच और:

import decklist 

मैं:

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
     import decklist 
ImportError: No module named decklist 

अजीब, अगर मैं इसे टर्मिनल से चलाने के लिए, मैं यह कर सकते हैं import decklist। लेकिन तब की तरह एक आदेश:

dl = decklist.DeckList() 

देता है:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'DeckList' 

क्या मैं गलत कर रहा हूँ? मैं बहुत निराश हूँ।

निम्नलिखित के रूप में
+0

मेरे पास एक [छोटा पायथन/सी ++/स्विग उदाहरण] है (https://github.com/martinxyz/python/tree/master/realistic) के खिलाफ जांच करने के लिए। – maxy

उत्तर

2

परिवर्तन decklist.i:

//decklist.i 
%module decklist 
%{ 
    #include "decklist.hpp" 
%} 
%include "decklist.hpp" // <-- *** use % in *.i *** 

या आप & कार्यों यहाँ है कि आप निर्यात करना चाहते हैं अपनी कक्षाओं घोषणा कर सकते हैं।

+0

ठीक है। मैं सोमवार तक यह कोशिश नहीं कर पाऊंगा ... मैं फिर रिपोर्ट करूंगा। सलाह के लिए धन्यवाद। – user650261

+0

कोई अच्छा नहीं, मुझे अभी भी वही त्रुटि मिल रही है :-( – user650261

+0

रुको, यह मेरी गलती हो सकती है। मुझे एहसास हुआ कि मैंने आज सुबह कोशिश करते समय एक और गलती की। मैं जल्द ही कोशिश करूंगा। – user650261