Funktion wird mal gefunden, mal nicht [gelöst]
-
Hallo,
ich bin gerade ziemlich am verzweifeln, da gerade allereinfachste Grundlagen bei mir nicht funktionieren. Leider ist es mir nicht möglich ein Minimalbeispiel mit dem Fehler zu posten, denn gerade da liegt das Problem.Der Code ist so aufgebaut (CopyPaste - vielleicht habe ich ja doch einen Schreibfehler, den ich gerade nicht sehe):
sim.h:class sim { public: void read_system_parameters(const olmc::ParamSet ¶ms); [...] void read_common_params(const olmc::ParamSet&); };#include "sim.h" [...] using namespace olmc; void sim::read_system_parameters(const olmc::ParamSet ¶ms) { read_common_params(params); [...] } void sim::read_common_params(const olmc::ParamSet & params){ [...] }So, jetzt bekomme ich beim Compilieren von system.cc sowas:
Ausgabe von 'g++ system.cc' (Zeilennummern an obigen Code angepasst): system.cc: In member function 'void sim::read_system_parameters(const olmc::ParamSet&)': system.cc:9: error: 'read_common_params' was not declared in this scope system.cc: At global scope: system.cc:15: error: no 'void sim::read_common_params(const olmc::ParamSet&)' member function declared in class 'sim'Das ist ja schonmal komisch genug, denn obiges Minimalbeispiel compiliert, bis auf die fehlende Deklaration von ParamSet. Nun gut, kann ja sein, dass ich in dem gekürzten Teil irgendwo was falsch mache. Nun habe ich das ganze aber mal durch den Präprozessor gejagt und in eine Datei geschrieben, um den Fehler genauer lokalisieren zu können:
g++ system.cc -E > test.ccUnd jetzt kommt's: test.cc lässt sich fehlerfrei compilieren!
Wie kann das denn sein? Der Präprozessor wird doch immer zuerst angewendet und sonst mache ich nichts anders! Ich bin gerade völlig verwirrt

-
Die using Direktive fügt einen namespace nichts hinzu, sondern macht nur bekannt. Schliess das ganze in den namespace ein.
namespace olmc { //definitionen }
-
drakon schrieb:
Die using Direktive fügt einen namespace nichts hinzu, sondern macht nur bekannt. Schliess das ganze in den namespace ein.
namespace olmc { //definitionen }Nein, das ist es nicht. Es soll alles im globalen Namensbereich liegen, ich benutze nur ein paar Funktionen aus olmc. Ich habe das using namespace auch mal rausgenommen und es überall explizit hingeschrieben, das ändert nichts.
Das komische ist auch, dass andere Übersetzungseinheiten, die read_common_params verwenden tadellos funktionieren, nur diese eine nicht.
-
Also in Visual Studio lässt es sich problemlos kompilieren. Ich denke mal das Problem liegt an einer andere Stelle, wäre es vielleicht möglich etwas mehr Code zu Gesicht zu bekommen?
-
Ah, sorry. Ich habe irgendwie gesehen, dass da die Klasse in einem namespace ist.

Ich vermute der Fehler lieght wo anderst.
-
Ich hab's! Ich bin ja so blind
!In meinem Verzeichnis war ein vorkompilierter Header von sim.h den ich wohl früher mal versehentlich erstellt habe. Den hat der Compiler dann anscheinend immer genommen - der war aber nicht mehr aktuell.
Jetzt frage ich mich nur noch, warum das die anderen Übersetzungeinheiten (die auch read_common_parameters verwenden) nicht gestört hat, sondern nur bei diesem Fall.