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

Posted

技术标签:

【中文标题】将控制台应用程序从 VC 6 迁移到 VS 2010【英文标题】:migrating console application from VC 6 to VS 2010 【发布时间】:2013-04-08 16:57:08 【问题描述】:

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

TMemPool<T>::TTag* that error C2143: syntax error : missing ';' before '*' along with error C4430: missing type specifier - int assumed. Note: C++ does not support default-int.

谁能帮我解决这个问题。如果我问了一个愚蠢的问题,我很抱歉。但我需要帮助,因为我不太擅长编码。

如果可能的话,您能否告诉我在将我的项目从 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_)

【问题讨论】:

我猜,您在.h 文件中的class 后面缺少一个分号。 不,这会导致 duplicate 类型说明符:class Foo /*1*/template &lt;class T&gt; TMemPool&lt;T&gt;::TTag* /*2*/ TMemPool&lt;T&gt;::GetAt - GetATreturn a FooTTag 也是如此?这里的问题是 TTag 没有命名类型,正如 user93353 解释的那样。 【参考方案1】:

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;

IIRC、VC6 用于编译缺少 typename 的内容,但从 VC7 开始,情况发生了变化。

【讨论】:

是的,VC6 欺骗并实例化了TMemPool&lt;T&gt; 以弄清楚TTag 会变成什么。

以上是关于将控制台应用程序从 VC 6 迁移到 VS 2010的主要内容,如果未能解决你的问题,请参考以下文章

如何将 VC++6.0 项目升级到 VS2010?

从 VS10 应用程序中查找/终止进程(VC6 应用程序)?

从 VC6 迁移到 VC9 的编译问题

C++ MFC VC 6.0 到 VS2013 lStreamReturn = GetRichEditCtrl().StreamIn(SF_RTF, es);

OpenCV 从 VS2013 迁移到 QT 5.5

问题:工程迁移 VC6->VS2008->VS2010