gpt4 book ai didi

c++ - 模板:我需要更好地学习这些吗?为什么我收到错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:09 24 4
gpt4 key购买 nike

我正在处理不再存在的其他人的代码,它是旧的 CodeWarrior 代码。 XCode 对此提示:

template <class listClass,class itemClass>
void FxStreamingObjectList<listClass,itemClass>::StreamOut(FxStream *stream)
{
if (listClass::size())
{
stream->PutSeparator();
stream->PutString(mFieldName.c_str());
stream->PutSeparator();
stream->PutBeginList();
stream->Indent(+1);

listClass::iterator iter;

for (iter=listClass::begin(); iter != listClass::end(); iter++)
{
stream->PutSeparator();
stream->PutString( (*iter)->GetClassID() );
}

(*iter)->StreamOut(stream);
}
stream->Indent(-1);
stream->PutSeparator();
stream->PutEndList();
stream->PutSeparator();
}

我在 listClass::iterator iter;for (iter=listClass::begin(); iter != listClass::end(); iter++) 上出错 即:

error: expected `;' before 'iter'
error: 'iter' was not declared in this scope

同一个 .h 中的其他地方,相同类型的模板声明我得到如下错误:

error: dependent-name 'listClass::iterator' is parsed as a non-type, but instantiation yields a type

在:

for (listClass::iterator iter=listClass::begin(); iter != listClass::end(); iter++)

我该如何解决这些错误?我不太了解模板,所以我很困惑,不知道从哪里开始。一个好的模板资源也很受欢迎。

最佳答案

编译器直到稍后在解析过程中才知道特定的 listClass对于 FxStreamingObjectList<listClass, itemClass> 的任何特定实例有一个名为 iterator 的成员类型.姓名iterator因此是一个“依赖名称”。

You must hint到您期望/需要的编译器iterator这里是一个类型,带有 typename关键词:

typename listClass::iterator iter;

和:

for (typename listClass::iterator it = listClass::begin(), end = listClass::end(); it != end; ++it)

(顺便说一句,begin()end() 真的是静态成员函数吗?)

只是另一个 C++ 怪癖。 :)

关于c++ - 模板:我需要更好地学习这些吗?为什么我收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com