我有在VS-2010中编译的代码,没有警告:

class MyClass {
public:
    class InternalClass;
};

class MyClass::InternalClass {
};

template<class QWERTY>
void Func( QWERTY& arg )
{
    typename QWERTY::InternalClass;
}

int main()
{
    MyClass var;
    Func( var );
    return 0;
}


现在我在VS-2017中编译此代码并得到警告4091:

warning C4091: '': ignored on left of 'MyClass::InternalClass' when no variable is declared


如果我想继续进行类型检查(而不想要警告:),该怎么办?

最佳答案

警告是抱怨这条线

typename QWERTY::InternalClass;


没有做任何事情,因为您没有声明变量或对其没有任何意义。它基本上与一行

int;


为了摆脱警告,一个简单的解决方法是实际使用它。例如

using MyType = typename QWERTY::InternalClass;
//or
typename QWERTY::InternalClass myObj;
//myObj....


这样做还将保留类型检查。

10-04 23:06