我在我的程序错误C2143中出现此错误:语法错误:在':'之前缺少',',我正在使用Visual c ++ express 2010,我认为在VC 2010中支持C ++ 11。
可以somone请修改此代码并解释如何在传统的for循环中恢复此for循环? ouFlexSignalInfo是来自c ++ stl
的列表数据类型for(auto ouSignalInfo : ouFlexSignalInfo) //C++11;
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
答案 0 :(得分:3)
大致相当于:
auto iterBegin = std::begin(ouFlexSignalInfo);
auto iterEnd = std::end(ouFlexSignalInfo);
for(; iterBegin != iterEnd; ++iterBegin)
{
auto ouSignalInfo = *iterBegin;
//the rest of body
}
iterBegin
和iterEnd
是从ouFlexSignalInfo成员begin
和end
返回的迭代器。
这种循环适用于具有开始和结束成员的所有内容
答案 1 :(得分:0)
如果使用MS VC ++ 2010,则编译器支持基于范围的for循环的MS语言扩展。代码将采用以下方式
for each ( auto ouSignalInfo in ouFlexSignalInfo )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
或者写出
会更好for each ( const auto &ouSignalInfo in ouFlexSignalInfo )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
由于ouFlexSignalInfo的类型未知,因此您可以使用迭代器。例如
#include <iterator>
for ( auto it = std::begin( ouFlexSignalInfo ); it != std::end( ouFlexSignalInfo ); ++it )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = it->m_omEnggValue.c_str();
ouSignal.m_omRawValue = it->m_omRawValue.c_str();
ouSignal.m_omSigName = it->m_omSigName.c_str();
ouSignal.m_omUnit = it->m_omUnit.c_str();
ouSignal.m_msgName = ouFrame.m_strFrameName.c_str();
SigInfoArray.Add( ouSignal );
}