Globaler Funktionspointer



  • Hi,

    ich habe eine Funktion

    ...
    #include "constants.h"
    
    namespace GiNaC
    {
    	bool fn_ex_is_less (ex a, ex b);
    ...
    }
    

    in utilities.h deklariert die in utilities.cpp implementiert wird.

    Jetzt hätte ich gern in constants.h auch im namespace GiNaC einen global-sichtbaren, konstanten Funktionszeiger auf fn_ex_is_less. Leider weiß ich überhaupt nicht wie das geht.

    #include "utilities.h"
    
    namespace GiNaC
    {
    ...
    bool(*fn_pt)(int,int) = fn_ex_is_less;
    
    }
    

    Das klappt leider nicht. Ich bekomme

    In file included from utilities.h:37,
                     from utilities.cpp:35:
    constants.h:251: error: 'fn_ex_is_less' was not declared in this scope
    

    Irgendwelche Ideen? Vielen Danke schonmal!

    Joachim



  • bool(*fn_pt)(ex,ex) = fn_ex_is_less;
    

    Natürlich so. Ändert aber nix am Fehler



  • Ja, ich hätte da eine Idee: sorg dafür, daß du keine wechselseitigen Abhängigkeiten zwischen den Headern hast. Die beiden Header utility.h und const.h binden sich gegenseitig ein - und da sind die Chancen hoch, daß sie nach der Verarbeitung durch den Präprozessor in der falschen Reihenfolge eingebunden werden.



  • CStoll schrieb:

    Ja, ich hätte da eine Idee: sorg dafür, daß du keine wechselseitigen Abhängigkeiten zwischen den Headern hast. Die beiden Header utility.h und const.h binden sich gegenseitig ein - und da sind die Chancen hoch, daß sie nach der Verarbeitung durch den Präprozessor in der falschen Reihenfolge eingebunden werden.

    Oke, wie z.B. ?

    Wenn ich die Sachen einfach untereinander in utilities.h packe:

    #include "constants.h"
    
    namespace GiNaC
    {
    
    	bool fn_ex_is_less (ex a, ex b);
    
    	bool(*fn_pt)(ex,ex) = fn_ex_is_less;
    
    ...
    

    Bekomme ich ganz viele Fehler:

    In file included from constants.h:38,
                     from UnivariatePolynomial.h:39,
                     from UnivariatePolynomial.cpp:34:
    utilities.h:50: error: expected type-specifier before 'invalid_argument'
    utilities.h:50: error: expected ')' before 'invalid_argument'
    utilities.h:50: error: expected initializer before 'invalid_argument'
    utilities.h:57: error: ISO C++ forbids declaration of 'list' with no type
    utilities.h:57: error: expected ',' or '...' before '<' token
    utilities.h:64: error: ISO C++ forbids declaration of 'list' with no type
    utilities.h:64: error: expected ',' or '...' before '<' token
    utilities.h:73: error: ISO C++ forbids declaration of 'list' with no type
    utilities.h:73: error: expected ',' or '...' before '<' token
    utilities.h:78: error: expected initializer before '<' token
    ...
    

    Die waren vorher alle nicht da.



  • Den Fehler kann ich aus diesen Fragmenten nicht nachvollziehen (zumal du bestimmt nicht den Bereich gepostet hast, in dem die Fehler aufgetreten sind). Aber auf jeden Fall solltest du eine der beiden #include-Anweisungen weglassen.




Anmelden zum Antworten