[C++/SWIG] Bindings kunnen headers niet vinden?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18
Ik werk meestal met Python, maar moet voor een project nu via een C++-library van een leverancier werken. Nu leek het me qua experimenteren praktisch om te kijken of ik wat wrappers kan genereren zodat ik in beginsel via Python met de onderliggende code kan werken. Helaas is het C++ van de universiteit al weer een tien jaar geleden, dus nu wil het niet helemaal lukken. Ik heb de volgende SWIG module code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%module config

%{
#include "Common/XXX_String.h"
#include "Config/Config.h"
#include "Config/ConfigDatabase.h"
%}

class XXX_String {
        XXX_String(const char *str, int length=0, bool copy=true);
};

class ConfigDatabase {
public:
        static ConfigDatabase* acquire(const XXX_String &strName);
};


Als ik dit aan SWIG geef gaat de eerste stap goed, er wordt dan een .cxx-bestand gegenereerd met heel veel wrapper code. Daarin komen onder andere de drie includes voorbij. Echter, bij het compileren van die wrapper code krijg ik allerlei foutmeldingen als "config_wrap.cxx:2797: error: 'XXX_String' was not declared in this scope". Dit ondanks het feit dat die includes dus vlak boven die regel staan, en de XXX_String-klasse ook daadwerkelijk in die XXX_String.h gedefinieerd wordt.

Iemand een tip over wat ik over het hoofd zie?

Rustacean


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Ik zie een definitie van XXX_String op regel 9, en waarschijnlijk word in jouw include ook nog een keer XXX_String gedefinieerd (mogelijk in een andere namespace?) en die worden misschien verward?

In C++ kan je niet een class dubbel definieren :)
Misschien moet regel 9 een declaratie zijn dan? (Ook al zou je header die waarschijnlijk al hebben)

[ Voor 28% gewijzigd door MLM op 06-12-2010 16:38 ]

-niks-


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18
MLM schreef op maandag 06 december 2010 @ 16:37:
Ik zie een definitie van XXX_String op regel 9, en waarschijnlijk word in jouw include ook nog een keer XXX_String gedefinieerd (mogelijk in een andere namespace?) en die worden misschien verward?

In C++ kan je niet een class dubbel definieren :)
Misschien moet regel 9 een declaratie zijn dan? (Ook al zou je header die waarschijnlijk al hebben)
Dit bestandje is een SWIG interface-file (.i), geen header-file, dus volgens mij is dit dan geen declaratie (maar een verwijzing voor SWIG, zodat ie weet wat ie moet wrappen). En dan zou ik volgens mij ook wel een andere foutmelding krijgen.

Rustacean