2016-04-29 125 views
0

我需要这个类的C++转换为一个Python模块,并给出错误 /* * arexcrypt.h/C++类与痛饮Python模块

#ifndef AREXCRYPT_H 
#define AREXCRYPT_H 

//Qt 
#include <QString> 
#include <QVector> 
#include <QFlags> 
//App 
#include "singleton.h" 

class ArexCrypt: public Singleton<ArexCrypt> 
{ 
friend class Singleton<ArexCrypt>; 

public: 
enum Compression { 
    IfReducedCompress, 
    AlwaysCompress, 
    NeverCompress 
}; 
enum IntegrityCheck { 
    NoCheck, 
    ChecksumCheck, 
    HashCheck 
}; 
enum Error { 
    NoneError, 
    NoKeyError, 
    NoDataError, 
    UnknownVersionError, 
    IntegrityError 
}; 
enum CryptoFlag{ 
    NoneFlag = 0, 
    CompressedFlag = 0x01, 
    ChecksumFlag = 0x02, 
    HashFlag = 0x04 
}; 

Q_DECLARE_FLAGS(CryptoFlags, CryptoFlag); 

void setKey(quint64 pKey); 
Compression CompressionMode() const; 
void setCompressionMode(Compression pMode); 
IntegrityCheck IntegrityProtectionMode() const; 
void setIntegrityProtectionMode(IntegrityCheck pMode); 
Error LastError() const; 

//METHODS 
QString EncryptToString(const QString &pText); 
QString DecryptToString(const QString &pEncryptedText); 
QString GenerateIntegrityKey(const QString &pText); 
bool CheckIntegrityKey(const QString &pText); 

private: 
//Data 
quint64 key; 
QVector<char> keyParts; 
Compression compressionMode; 
IntegrityCheck protectionMode; 
Error lastError; 
bool showConsoleMessages; 

//CONTRUCTORS AND DESTROYERS 
ArexCrypt(); 

//METHODS 
void SplitKey(); 
void EncryptArray(QByteArray &pArray); 
void DecryptArray(QByteArray &pArray); 
QByteArray GenerateIntegrityData(QByteArray dataArray, CryptoFlags &flags); 
QByteArray EncryptToByteArray(QByteArray pTextArray); 
QByteArray DecryptToByteArray(QByteArray pEncryptedArray); 
//OTHERS 
QString EncryptToString(QByteArray pTextArray); 
QString DecryptToString(QByteArray pEncryptedArray); 
QByteArray EncryptToByteArray(const QString &pText); 
QByteArray DecryptToByteArray(const QString &pEncryptedText); 
}; 

Q_DECLARE_OPERATORS_FOR_FLAGS(ArexCrypt::CryptoFlags); 

#endif // AREXCRYPT_H 

/arexcrypt.i/

/* arexcrypt.i */ 
%module arexcrypt 
%{ 
#include "arexcrypt.h" 
%} 

%import "singleton.i" 
%include std_string.i 
%include std_vector.i 
%include stl.i 
%include "arexcrypt.h" 

/* singleton.h */

#ifndef SINGLETON_H 
#define SINGLETON_H 

template <typename T> struct Singleton 
{ 
    static T &instance() 
    { 
     static T m_instance; 
     return m_instance; 
    } 
protected: 
    Singleton() { } 
}; 

#endif // SINGLETON_H 

/* singleton.i */

/* singleton.i */ 
%module singleton 
%{ 
#include "singleton.h" 
%} 

%include "singleton.h" 
%template(intSingleton) Singleton<int>; 

然后当我转换为蟒我得到这个控制台

痛饮-C++ -python arexcrypt.i

arexcrypt.h(11 ):警告401:关于基类“Singleton < ArexCrypt>”未知。忽略。 arexcrypt.h(11):警告401:您可能忘记使用%模板实例化'Singleton < ArexCrypt>'。 arexcrypt.h(40):警告504:函数ArexCrypt :: Q_DECLARE_FLAGS(CryptoFlags,ArexCrypt :: CryptoFlag)必须具有返回类型。忽略。 arexcrypt.h(81):警告503:除非重命名为有效的标识符,否则无法包装“ArexCrypt :: CryptoFlags”。

GCC -c arexcrypt_wrap.cxx -o arexcrypt.o -fpic -std =的C++ 0x

我得到这个

arexcrypt_wrap.cxx:1: warning: -fpic ignored for target (all code is position independent) 
arexcrypt_wrap.cxx:171:21: error: Python.h: No such file or directory 
arexcrypt_wrap.cxx:3027:4: error: #error "This python version requires swig to be run with the '-classic' option" 
In file included from arexcrypt_wrap.cxx:3124: 
arexcrypt.h:5:19: error: QString: No such file or directory 
arexcrypt.h:6:19: error: QVector: No such file or directory 
arexcrypt.h:7:18: error: QFlags: No such file or directory 
arexcrypt_wrap.cxx:801: error: 'PyObject' was not declared in this scope 
arexcrypt_wrap.cxx:801: error: 'str' was not declared in this scope 
arexcrypt_wrap.cxx:802: error: expected ',' or ';' before '{' token 
arexcrypt_wrap.cxx:825: error: expected initializer before '*' token 
arexcrypt_wrap.cxx:851: error: expected initializer before '*' token 
arexcrypt_wrap.cxx:905: error: expected initializer before '*' token 
arexcrypt_wrap.cxx:920: error: 'inquiry' does not name a type 
arexcrypt_wrap.cxx:921: error: 'intargfunc' does not name a type 
arexcrypt_wrap.cxx:922: error: 'intintargfunc' does not name a type 
arexcrypt_wrap.cxx:923: error: 'intobjargproc' does not name a type 
arexcrypt_wrap.cxx:924: error: 'intintobjargproc' does not name a type 
arexcrypt_wrap.cxx:925: error: 'getreadbufferproc' does not name a type 
arexcrypt_wrap.cxx:926: error: 'getwritebufferproc' does not name a type 
arexcrypt_wrap.cxx:927: error: 'getsegcountproc' does not name a type 
arexcrypt_wrap.cxx:928: error: 'getcharbufferproc' does not name a type 
arexcrypt_wrap.cxx:929: error: 'PyObject' was not declared in this scope 
arexcrypt_wrap.cxx:929: error: 'x' was not declared in this scope 
arexcrypt_wrap.cxx:929: error: expected primary-expression before 'void' 
arexcrypt_wrap.cxx:929: error: initializer expression list treated as compound expression 
arexcrypt_wrap.cxx:930: error: expected ',' or ';' before '{' token 
In file included from c:\mingw64_4.4.6\bin\../lib/gcc/x86_64-w64-mingw32/4.4.6/../../../../x86_64-w64-mingw32/include/c++/4.4.6/stdexcept:38, 
       from arexcrypt_wrap.cxx:3051: 
c:\mingw64_4.4.6\bin\../lib/gcc/x86_64-w64-mingw32/4.4.6/../../../../x86_64-w64-mingw32/include/c++/4.4.6/exception:35: error: expected declaration before end of line 

有谁知道什么可能要去我做错了

+0

遗憾我错过的东西 –

+0

/*的#ifndef SINGLETON_H 的#define SINGLETON_H 模板结构辛格尔顿 { \t静态T&实例() \t { \t \t静态牛逼m_instance; \t \t return m_instance; \t} protected: \t Singleton(){} }; #endif // SINGLETON_H * / –

回答

0

作为一个规则:总是先看第一个错误 - 这可能是你的罪魁祸首。

在你的情况

arexcrypt_wrap.cxx:1: warning: -fpic ignored for target (all code is position independent) 
arexcrypt_wrap.cxx:171:21: error: Python.h: No such file or directory 

你错过了Python开发的文件。