C++ 将控制台应用程序从VC 6迁移到VS 2010

C++ 将控制台应用程序从VC 6迁移到VS 2010,c++,visual-studio-2010,templates,porting,visual-c++-6,C++,Visual Studio 2010,Templates,Porting,Visual C++ 6,我正在将我的项目从vc6迁移到vs2010。编译时,第行出现错误 TMemPool::TTag*该错误C2143:语法错误:缺少“;”在“*”之前出现错误C4430:缺少类型说明符-假定为int。注意:C++不支持Debug T-I. < /P> 有人能帮我吗。如果我问了一个愚蠢的问题,我很抱歉。但我需要帮助,因为我不太擅长编码 如果可能的话,你能告诉我在将我的项目从VC 6迁移到VS 2010时需要做哪些预先要求的设置吗。另外,在迁移代码之前还需要执行任何步骤 请在此处查找错误代码行。如果你还

我正在将我的项目从vc6迁移到vs2010。编译时,第行出现错误

TMemPool::TTag*该错误C2143:语法错误:缺少“;”在“*”之前出现错误C4430:缺少类型说明符-假定为int。注意:C++不支持Debug T-I.<代码> < /P>
有人能帮我吗。如果我问了一个愚蠢的问题,我很抱歉。但我需要帮助,因为我不太擅长编码

如果可能的话,你能告诉我在将我的项目从VC 6迁移到VS 2010时需要做哪些预先要求的设置吗。另外,在迁移代码之前还需要执行任何步骤

请在此处查找错误代码行。如果你还需要什么,请告诉我

提前谢谢

// ----------------------------------------------------------------------------
template <class T>
TMemPool<T>::TTag*
TMemPool<T>::GetAt
(
int I_Index
)
{
if(I_Index < 0 || (unsigned int)I_Index > GetTotal())
    return NULL;
return &m_pStorage[I_Index].m_Tag;
}

#endif // !defined(AFX_TMEMPOOL_H__825D671F_49E6_46C1_AB3D_79920EF692D8__INCLUDED_)
//----------------------------------------------------------------------------
模板
TMemPool::TTag*
TMemPool::GetAt
(
国际指数
)
{
if(I_Index<0 | |(unsigned int)I_Index>GetTotal())
返回NULL;
返回m_pStorage[I_索引].m_标记(&U);
}
#endif/!已定义(包括AFX\u TMEMPOOL\u H\u 825D671F\u 49E6\u 46C1\u AB3D\u 79920EF692D8)

什么类型的
TTag

试试这个

template <class T>
typename TMemPool<T>::TTag* TMemPool<T>::GetAt(int I_Index)
{
    if(I_Index < 0 || (unsigned int)I_Index > GetTotal())
        return NULL;
    return &m_pStorage[I_Index].m_Tag;
}
模板
typename TMemPool::TTag*TMemPool::GetAt(inti_索引)
{
if(I_Index<0 | |(unsigned int)I_Index>GetTotal())
返回NULL;
返回m_pStorage[I_索引].m_标记(&U);
}

IIRC,VC6过去编译缺少
typename
的东西,但VC7以后,情况发生了变化。

我猜,你在
.h
文件中的
class{}
后面缺少了一个分号。不,这会导致重复的类型说明符:
class Foo{}/*1*/template TMemPool::TTag*/*2*/TMemPool::GetAt
-那么
GetAt
是否返回
Foo
TTag
?这里的问题是,
TTag
没有像user93353解释的那样命名类型。是的,VC6欺骗并实例化了
TMemPool
,以确定
TTag
将变成什么。