lundi 2 mai 2022

invalid use of incomplete type with default template [closed]

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