警告:带有模板的VS 2012中的“错误存储类”

时间:2013-11-18 03:28:48

标签: c++ templates visual-studio-2012

我在VS 2012中构建模板代码时收到错误。

template<typename T> template<typename Q>
void outer<T>::inner<Q>::iid(explicit T o1,explicit Q o2){

    cout<<"the two template objects are as follows"<<o1<<"    "<<o2<<endl;
    cout << "outer == "<< typeid(T).name() <<endl;
    cout << "inner == "<< typeid(Q).name() <<endl;
    cout << "Full inner == "<< typeid(*this).name() <<endl;

}

我收到此错误,

nestedtemplate.h(17): warning C4042: 'o1' : has bad storage class
nestedtemplate.h(17): warning C4042: 'o2' : has bad storage class

我收到此错误的原因。这段代码在VS2008中没有任何错误。

1 个答案:

答案 0 :(得分:0)

您不能将explicit关键字用于此类函数参数。将签名更改为

template<typename T> template<typename Q>
void outer<T>::inner<Q>::iid(T o1, Q o2)

将修复错误。

explicit关键字用于单参数构造函数(以及C ++ 11中的转换运算符),以指定编译器不应自动执行转换,但仅在程序员明确指定时才执行此操作这应该。它很有用(我会推荐),以避免在代码中出现奇怪的错误。

我不确定您使用explicit的确是做什么的 - 您能否提供更多详细信息,以便我们建议合法的替代方案?