Templates 4 a Nu-B

Discussion in 'C++' started by Rene Ivon Shamberger, Dec 27, 2012.

  1. In a class I declared a template function


    ---myClass.hpp---
    #ifndef MYCLASS_HPP
    #define MYCLASS_HPP

    namespace ABC{
    class myClass{
    ....
    public:
    myClass();
    ~myClass();
    void someMethod();
    template< typename T> std::string& myTemplate(const T& data);
    }; // class
    } // namespace
    #include "myClass.tcc"
    #endif

    ---myClass.cpp---
    ABC::myClass::myClass(){/*nothing*/}
    ABC::myClass::~myClass(){/*nothing*/}
    ABC::myClass::someMethod(){/*nothing*/}


    In a tcc file I impletemtn the template function

    ---myClass.tcc--
    template< typename T>
    std::string& ABC::myClass::myTemplate(const T& data){
    ...
    return someString;
    }

    VC++ gives me an error that reads:
    error C2039: 'myTemplate' : is not a member of 'ABC'

    I tried this:
    namespace ABC{
    template< typename T>
    std::string& ABC::myClass::myTemplate(const T& data){
    ...
    return someString;
    }
    }

    but to no avail.
    What am I am doing wrong?
     
    Rene Ivon Shamberger, Dec 27, 2012
    #1
    1. Advertising

  2. On 12/27/2012 12:34 PM, Rene Ivon Shamberger wrote:
    > In a class I declared a template function
    >
    >
    > ---myClass.hpp---
    > #ifndef MYCLASS_HPP
    > #define MYCLASS_HPP
    >
    > namespace ABC{
    > class myClass{
    > ....
    > public:
    > myClass();
    > ~myClass();
    > void someMethod();
    > template< typename T> std::string& myTemplate(const T& data);
    > }; // class
    > } // namespace
    > #include "myClass.tcc"
    > #endif
    >
    > ---myClass.cpp---
    > ABC::myClass::myClass(){/*nothing*/}
    > ABC::myClass::~myClass(){/*nothing*/}
    > ABC::myClass::someMethod(){/*nothing*/}


    void ABC::myClass::someMethod(){}

    >
    >
    > In a tcc file I impletemtn the template function
    >
    > ---myClass.tcc--
    > template< typename T>
    > std::string& ABC::myClass::myTemplate(const T& data){


    Should probably be

    template<typename T>
    std::string& ABC::myClass::myTemplate<T>(const T& data){

    > ...
    > return someString;
    > }
    >
    > VC++ gives me an error that reads:
    > error C2039: 'myTemplate' : is not a member of 'ABC'
    >
    > I tried this:
    > namespace ABC{
    > template< typename T>
    > std::string& ABC::myClass::myTemplate(const T& data){
    > ...
    > return someString;
    > }
    > }
    >
    > but to no avail.
    > What am I am doing wrong?


    I am guessing, but most likely you're doing something that you're not
    telling us. I just took your code, put it all in one file and compiled
    with VC++ 2012 *successfully*. Here is the code:

    #include <string>

    namespace ABC{
    class myClass{
    //
    public:
    myClass();
    ~myClass();
    void someMethod();
    template< typename T> std::string& myTemplate(const T& data);
    }; // class
    } // namespace

    template< typename T>
    std::string& ABC::myClass::myTemplate(const T& data){
    return someString;
    }

    ABC::myClass::myClass(){/*nothing*/}
    ABC::myClass::~myClass(){/*nothing*/}
    void ABC::myClass::someMethod(){/*nothing*/}

    int main()
    {
    ABC::myClass mc;
    }

    Now, 'someString' is undefined inside the 'myTemplate' member function,
    but that fact goes unnoticed because there is no *use* of 'myTemplate'
    member anywhere in the program, so the compiler only performs some
    syntactic analysis of the 'myTemplate's body.

    Perhaps if you posted a more complete program, we could help you more.

    V
    --
    I do not respond to top-posted replies, please don't ask
     
    Victor Bazarov, Dec 27, 2012
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Fred
    Replies:
    1
    Views:
    605
    Neredbojias
    Sep 26, 2005
  2. John Harrison

    using templates in templates

    John Harrison, Jul 31, 2003, in forum: C++
    Replies:
    8
    Views:
    386
    Torsten Curdt
    Jul 31, 2003
  3. JKop
    Replies:
    3
    Views:
    479
  4. Tom McCallum

    Templates within templates

    Tom McCallum, Aug 4, 2004, in forum: C++
    Replies:
    2
    Views:
    370
    tom_usenet
    Aug 4, 2004
  5. recover
    Replies:
    2
    Views:
    813
    recover
    Jul 25, 2006
Loading...

Share This Page