I would like to create a C++ class with a default template parameter. However, I am having the following error:
 error: invalid use of incomplete type
The code is the follow:
#include <iostream>
#include <string>
#include <array>
typedef std::array<double, 3> vec;
enum Op {Op1, Op2, Op3};
template<class T, enum Op S=Op1>
class classA
{
    public:
    class classInsideA
    {
        public:
        classInsideA() {}
        void tst()
        {
            std::cout << "inside A"<< std::endl;
        }
    };
    void foo();
};
template<class T>
void classA<T>::foo() // not working
{
    std::cout<< "I am being called in here" << std::endl;
}
int main(int argc, char** argv)
{
    
    classA<vec> obj2;
   return 0;
}
I would like that the default template would not change any of the current syntax in the class classA. How can I fix this?
Edit: Making the function have 2 template parameters, works.
template<class T, Op S>
void classA<T, S>::foo()
{
    std::cout<< "I am being called in here" << std::endl;
}
But if the function has a default parameter, why do I need to specify the two templates. Shouldn't assume the default one?
Aucun commentaire:
Enregistrer un commentaire