kostenloser Webspace werbefrei: lima-city


Template-abhängigen Konstruktor deklarieren

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    bladehunter

    Kostenloser Webspace von bladehunter

    bladehunter hat kostenlosen Webspace.

    Angenommen ich habe die Deklaration

    template<typename T> struct foo;


    Wie würde dann die Deklaration für den Konstruktor aussehen?

    Folgende Variante
    template<typename T> foo::foo( T a ); //Zeile 3

    funktioniert jedenfalls nicht:

    decl.cpp:3: Fehler: »template<class T> struct foo« used without template parameters
    decl.cpp:3: Fehler: expected constructor, destructor, or type conversion before »;« token



    Und um das zu betonen: Ich möchte nur deklarieren, nicht definieren!

    Abstimmung (Nur eine Auswahl möglich)

    Geht nicht
    0 % (0 Stimmen)
    Müsste möglich sein
    0 % (0 Stimmen)
    Ist möglich
    100 % (1 Stimme)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Also folgendes funktioniert bei mir:
    #include <iostream>
    
    using namespace std;
    
    template<typename T>
    struct foo
    {
      foo(T a);
    
      T var;
    };
    
    template<typename T>
    foo<T>::foo(T a)
    {
      var = a;
    }
    
    int main(void)
    {
      foo<int> bar(42);
      cout << bar.var << endl;
      return 0;
    }
  4. Autor dieses Themas

    bladehunter

    Kostenloser Webspace von bladehunter

    bladehunter hat kostenlosen Webspace.

    Das ist nicht das, was ich haben möchte. Du hast sowohl die Klasse als auch den Konstruktor definiert. Ich möchte aber, dass sie nur deklariert sind.
  5. c****s

    Du hast einfach ein <T> vergessen:

    Streiche:

    template<typename T> foo::foo( T a );


    Setze:

    template<typename T> foo<T>::foo( T a );


    Dann sollte es auch mit dem Nachbarn klappen.
  6. Autor dieses Themas

    bladehunter

    Kostenloser Webspace von bladehunter

    bladehunter hat kostenlosen Webspace.


    Dann sollte es auch mit dem Nachbarn klappen.

    Leider nein.

    template<typename T> struct foo;
    
    template<typename T> foo<T>::foo( T a );
    
    int main() {
            int a = 42;
            foo FOO( a );
    }

    Ergibt die Fehlermeldungen
    constr.cpp:3: Fehler: invalid use of incomplete type »struct foo<T>«
    constr.cpp:1: Fehler: declaration of »struct foo<T>«
    constr.cpp: In function »int main()«:
    constr.cpp:7: Fehler: missing template arguments before »FOO«
    constr.cpp:7: Fehler: expected »;« before »FOO«
  7. c****s

    Der Fehler liegt jetzt meines Erachtens auch wo anders, nämlich in der Deklaration der Variablen FOO, da nun dort das Template fehlt.

    template<typename T> struct foo;
    
    template<typename T> foo<T>::foo( T a );
    
    int main() {
            int a = 42;
            foo<int> FOO( a );
    }


    OBACHT: Ich habe hier keinen Compiler zur Hand. Falls die Templateklasse keine primitiven Datentypen verträgt, dann versuchs mal mit:

    class Wrapper
    {
    public:
        int a;
        Wrapper (int a)
        {
            this->a = a;
        };
    };
    
    template<typename T> struct foo;
    
    template<typename T> foo<T>::foo( T a );
    
    int main() {
            Wrapper w (42);
            foo<Wrapper> FOO(w);
    }


    Wie gesagt: kein Compiler => nicht getestet => also fehlende Strichpunkte etc. bitte ignorieren.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!