2016-11-24 7 views
0

Ich bin ziemlich neu mit swig und ich bekomme einen Fehler, den ich nicht finden kann. Der Fehler lautet:Fehler bei der Verwendung von swig: Syntaxfehler im Eingang (1)

/home/investigador/OMICRON-GNURadio/gr-freqAdaptiveOFDM/swig/../include/freqAdaptiveOFDM/mapper.h:39: Fehler: Syntaxfehler in Eingabe (1).

Und die Datei, wo der Fehler ist, ist dies:

#ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H 
#define INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H 

#include <freqAdaptiveOFDM/api.h> 
#include <gnuradio/digital/packet_header_default.h> 

namespace gr { 
namespace freqAdaptiveOFDM { 

class FREQADAPTIVEOFDM_API signal_field : virtual public digital::packet_header_default 
{ 
public: 
    typedef boost::shared_ptr<signal_field> sptr; 
    static sptr make(); 

protected: 
    signal_field(); 
}; 

} // namespace freqAdaptiveOFDM 
} // namespace gr 

#endif /* INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H */ 

Die Linie, wo der Fehler gefunden wird, ist die Klasse FREQADAPTIVEOFDM_API Linie. Vielen Dank im Voraus für die Hilfe!

By the way, meine swig Datei ist folgende:

#define freqAdaptiveOFDM_API 
#define DIGITAL_API 

%include "gnuradio.i" 
%include "freqAdaptiveOFDM_swig_doc.i" 

%{ 
#include "freqAdaptiveOFDM/mapper.h"; 
#include "freqAdaptiveOFDM/signal_field.h" 
%} 

%include "gnuradio/digital/packet_header_default.h" 

%include "freqAdaptiveOFDM/mapper.h" 
%include "freqAdaptiveOFDM/signal_field.h" 

GR_SWIG_BLOCK_MAGIC2(freqAdaptiveOFDM, mapper); 

%template(signal_field_sptr) boost::shared_ptr<gr::freqAdaptiveOFDM::signal_field>; 

%pythoncode %{ 
signal_field_sptr.__repr__ = lambda self: "<signal_field>" 
signal_field = signal_field.make; 
%} 
+0

swig beschwert sich über mapper.h, Zeile 39, nicht über die Datei, die Sie teilen! –

+0

mapper.h ist die erste Datei, die ich geteilt habe. Zeile 39 ist die Zeile: "Klasse FREQADAPTIVEOFDM_API Signalfeld: virtuelles öffentliches digitales :: packet_header_default ". – Samuel

+0

oh, diese Datei sollte * nicht * den Include-Guard namens '#ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H' enthalten. Hast du das aus einer Datei signal_field.h kopiert und eingefügt, vielleicht? –

Antwort

0

Wahrscheinlich ist dies, weil FREQADAPTIVEOFDM_API nicht überall in Ihrem SWIG Schnittstelle definiert ist.

Entfernen der fälschlicherweise aktiviert

#define freqAdaptiveOFDM_API 

und es durch

#define FREQADAPTIVEOFDM_API 

An der Spitze Ihrer .i-Datei ersetzen soll, dass sicher lösen.

+0

Nein, das löst das nicht **. Es ist nur Kosmetik, um das Problem zu verbergen. Dieses Makro erfüllt einen Zweck! Tatsächlich enthält das Makro die plattformspezifischen Modifikatoren, um ein Symbol zu exportieren. Das würde die Dinge nur noch verschlimmern. –

+0

Hintergrundinfo: GNU Funkmodule folgen einem gemeinsamen Muster und 'MODULENAME_API' wird immer in include/modulename/api.h definiert. Wenn nicht, hat jemand es entfernt. –

+0

Es sollte auch an der Spitze, wie Sie es richtig kapitalisiert, in der SWIG-Datei, aber die Tatsache, dass es hier in der falschen Großschreibung ist bedeutet, dass jemand ersetzt, und wahrscheinlich tat es automatisch, und etwas ist kaputt –

1

Sie scheinen Teile Ihrer Include-Dateien manuell geändert zu haben und haben sie zerstört.

Ich kann ein paar der möglichen Probleme Liste unten, aber um ehrlich zu sein:

nur gr_modtool mit einem sauberen Modul erstellen, dann gr_modtool add alle Stubs für Blöcke, die Sie haben wollen, dann kopieren Sie einfach über die aktuelle Methoden und Felder, die Sie brauchen - lassen Sie die #includes in Ruhe, solange Sie nicht wirklich verstehen, was sie tun. So

, Probleme:

  • Sie haben eine Datei, die Sie mapper.h nennen, aber es hat eine includeguard deutlich kopieren und aus einer anderen Datei eingefügt: #ifndef INCLUDED_FREQADAPTIVEOFDM_SIGNAL_FIELD_H. Dies bedeutet in einigen Fällen, dass nur eine der Dateien überhaupt "relevant" ist, und die andere wird grundsätzlich als leer behandelt! Wikipedia "include guard".
  • Ihre #define freqAdaptiveOFDM_API sollte richtig groß geschrieben werden. Haben Sie vielleicht Inhalte oder ganze Dateien kopiert und eingefügt und dann eine automatische, Groß-/Kleinschreibung nicht berücksichtigende Suche nach dem ursprünglichen Modulnamen verwendet? Wahrscheinlich hast du auf diese Weise viele Dinge kaputt gemacht. Grundsätzlich wird bei Everying im C-Präprozessor und in der C++ - Sprache zwischen Groß- und Kleinschreibung unterschieden.
  • #define DIGITAL_API sieht nicht sicher - Ich stimme mit Flexo überein, es ist notwendig, das MODULENAME_API Makro in Ihrer SWIG-Datei zu definieren, aber nur für Ihr eigenes Modul - ich bin mir nicht ganz sicher, warum Sie das hier brauchen, aber ich denke, Zeug habe nicht ohne es gebaut. Vielleicht möchten Sie also eine Vorwärtsdefinition der Typen von der digitalen API, die Sie verwenden, machen? Nicht ganz sicher, aber es könnte Ecken geben, wo das gilt.
Verwandte Themen