Funktionen und Namespace



  • Ich habe leider schon wieder eine Frage. Diesmal bekomme ich eine Fehlermeldung beim linken.

    Erstmal ein bischen Code:

    function.h

    #include<vector>
      namespace test{
    
      template<typename T>
      void foo(std::vector<T> &v);
    
      template<typename T>
      void bar(std::vector<T> &v);
      }
    

    function.cpp

    #include"function.h"
      #include<vector>
      template<typename T>
      void test::
      void foo(std::vector<T> &v){}
    
      template<typename T>
      void test::
      void bar(std::vector<T> &v){}
    
    }
    

    foobar.cpp

    #include<vector>
      #include"function.h"
    
      int main(){
        std::vector<int> v;
        test::foo(v);
        return 0;
      }
    

    Kompiliert ohne Probleme. Erstelle ich in function.cpp eine main Methode funkioniert auch das linken Fehlerfrei.

    Nun meldet der Linker mir:
    undefined reference to `void test::foo<int>(std::vector<int, std::allocator<int> >&)'

    Das verstehe ich leider nicht, da ich keine weiteren Libs linken muss.

    Zweite Frage: Ist dieser Code in Form von Funktionstemplates so ok?

    Vielen Dank im voraus! 🙂



  • template funktionen müssen direkt im header definiert werden.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html



  • Danke! 🙂


Anmelden zum Antworten