尝试在显式初始化期间创建函数副本时出错

时间:2011-11-11 14:12:54

标签: c++ templates generics

我无法理解我在模板类程序中遇到的错误。

CODE

#include <iostream>
#include<string>

using namespace std;

template <class dataType> class myClass {
public:
void function();
};

template<> class myClass<int> {
public:
void expli_function();
};

template <class dataType> void myClass<dataType>::function() {
cout << "Not an explicit function !" << endl;
}

template <class int> void myClass<int>::expli_function() { //<-- while pointing towards errors compiler points here
cout << "Explicit function !" << endl;
}

int main() {
myClass<string> ob1;
myClass<int> ob2;
ob1.function();
ob2.expli_function();
} 

错误是:

tester_1.cpp(20): error C2332: 'class' : missing tag name
tester_1.cpp(20): error C2628: '<unnamed-tag>' followed by 'int' is illegal (did you forget a ';'?)
tester_1.cpp(20): error C2993: '' : illegal type for non-type template parameter '<unnamed-tag>'
error C2244: 'myClass<int>::expli_function' : unable to match function definition to an existing declaration

为什么我会收到这些错误,我该如何解决?

2 个答案:

答案 0 :(得分:5)

这解决了它:

void myClass<int>::expli_function() {
    cout << "Explicit function !" << endl;
}

由于class myClass<int>是一种特殊化,因此在定义函数方法之前不需要template<int>关键字。

答案 1 :(得分:0)

除了VJo所说的。

您不需要为(唯一)特化模板定义函数定义。即

void myClass<int>::expli_function() { //<-- while pointing towards errors compiler points here
cout << "Explicit function !" << endl;
}

将为解析为myClass<int>的类定义expli_function()。

编辑:太晚了!他做了更多编辑:)