0

Consider the following example:

class MyClass
{
    const int _id;
public:
    MyClass(auto id) : _id(id) {} 
};

int main()
{
    MyClass(3);

    return 0;
}

It works fine.

Also

class MyClass
{
    const int _id;
public:
    MyClass(auto id);
};

MyClass::MyClass(auto id) : _id(id)
{
}

int main()
{
    MyClass(3);

    return 0;
}

Works fine.

However,

#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass
{
    const int _id;
public:
    MyClass(auto id);
};

#endif

and

#include "MyClass.h"

MyClass::MyClass(auto id) : _id(id)
{
}

and

#include "MyClass.h"

int main()
{
    MyClass(3);

    return 0;
}

Gives this linker error:

/tmp/ccJQ1HNz.o: In function `main':
deduce.cpp:(.text+0x15): undefined reference to `MyClass::MyClass<int>(int)'
collect2: error: ld returned 1 exit status

So it has to do something with templates .. But where do they come in?

otisonoza
  • 1,334
  • 2
  • 14
  • 32

0 Answers0