如果实现在单独的文件中,为什么auto不起作用?

时间:2016-05-13 09:58:54

标签: c++ templates c++11 auto

考虑以下示例:

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

int main()
{
    MyClass(3);

    return 0;
}

工作正常。

另外

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

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

int main()
{
    MyClass(3);

    return 0;
}

工作正常。

然而,

#ifndef MYCLASS_H
#define MYCLASS_H

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

#endif

#include "MyClass.h"

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

#include "MyClass.h"

int main()
{
    MyClass(3);

    return 0;
}

给出了这个链接器错误:

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

所以它必须对模板做些什么..但是它们在哪里进来?

0 个答案:

没有答案