Kombination von C- und C++ Programm

Alles rund um die Programmierung mit Qt
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Kombination von C- und C++ Programm

Beitrag von qtNiko »

hallo,

ich arbeite an einer Qt-GUI für ein Kommandozeilenprogramm, das in C erstellt wurde und eine Menge an .c-Files und .h-Files enthält. Das Kommandozeilenprogramm funktioniert einwandfrei.
In meinem Qt-Teil benötige ich einige h-Files aus der C-Version, die ich per

Code: Alles auswählen

extern "C" {
  #include "file1.h"
  #include "file2.h"
  ...
}
einbinde.
Einige dieser h-Files konnte ich problemlos so einbinden, und das Qt-Programm funktioniert damit. Jetzt aber kommt das Problem, das ich in einem Beispiel darstelle:

Code: Alles auswählen

Module aus der Kommandozeilen-Version:
   Inhalt von file5.h:
      ...
      #define SYSTEM_A_DIM   3
      ...

   Inhalt von file6.h:
      ...
      ERR function_1(double p_a[SYSTEM_A_DIM], ...);   //function prototype
      ...

   Inhalt von file6.c:
      #include "file5.h"
      ...
      ERR function_1(double p_a[SYSTEM_A_DIM], ...)  {
      ...  // diverse statements
      } 
In file6.h ist kein #include "file5.h" enthalten. Dennoch funktioniert das build in der Kommandozeilenversion als reines C-Programm ohne Fehlermeldungen, und das Programm funktioniert ebenfalls.

Sobald ich nun in meinem Qt-Modul file6.h includiere,

Code: Alles auswählen

extern "C" {
  #include "file1.h"
  #include "file2.h"
  ...
   #include "file6.h"
   ...
}
gibt es beim Compilieren/Linken die Fehlermeldung, dass SYSTEM_A_DIM nicht deklariert sei.
Nun könnte ich natürlich einfach in file6.h ein #include "file5.h" einfügen. Aber ich möchte einerseits die Files der C-Version möglichst nicht ändern und andererseits vor einer evtl. Änderung verstehen, was hier falsch läuft. Wenn es gar nicht anders als mit dem zusätzlichen #include ... geht, dann muss es eben sein, aber vorher hätte ich gerne fachkundigen Rat, warum dies so nicht funktioniert.

Danke schon mal
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zufall - wird über irgend einen anderen Header inkludiert. Anders geht es nicht.

wenn etwas in einem Header definiert ist, ich es in einem anderen benutze, muss ich auch sicherstellen dass es dort irgendwie vorhanden ist.

Da aber ERR function_1(double p_a[SYSTEM_A_DIM], ...) nichts anderes als ERR function_1(double *p_a, ...) ist kann man es auch so schreiben und damit dein Problem umgehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten