我有类APD并通过向量读取文件中的一些数据。 对于某些操作,我将使用枚举标志,但为什么设置标志有效,但之后不直接检查。
以下是代码段:
for(unsigned long int i=0; i<apdvec_filter.size(); i++)
{
long int APD_filter_SN_i = apdvec_filter[i].getSN();
for(unsigned long int j=0; j<apdvec_database.size(); j++)
{
long int APD_database_SN_j = apdvec_database[j].getSN();
if(APD_filter_SN_i==APD_database_SN_j && APD_filter_SN_i!=0 && apdvec_database[j].getMatchStateString()!=APD::MATCHED)
{
apdvec_database[j].setMatchState(APD::MATCHED);
cout << "SN_i: " << APD_database_SN_j << " SN_j:" << APD_database_SN_j << " type: " << apdvec_database[j].getMatchStateString() << endl;
}
if(APD_filter_SN_i==APD_database_SN_j)
{
// if(apdvec_database[j].getMatchStateString()==APD::MATCHED)
{
cout << "SN_j: " << APD_database_SN_j << " type: " << apdvec_database[j].getMatchStateString() << endl;
}
}
}
}
这会产生:
SN_i: 818008630 SN_j:818008630 type: MATCHED
SN_j: 818008630 type: MATCHED
SN_i: 917010242 SN_j:917010242 type: MATCHED
SN_j: 917010242 type: MATCHED
SN_i: 912009899 SN_j:912009899 type: MATCHED
SN_j: 912009899 type: MATCHED
SN_i: 906009386 SN_j:906009386 type: MATCHED
SN_j: 906009386 type: MATCHED
但是当我输入行// if(apdvec_database[j].getMatchStateString()==APD::MATCHED)
然后我才得到
SN_i: 818008630 SN_j:818008630 type: MATCHED
SN_i: 917010242 SN_j:917010242 type: MATCHED
SN_i: 912009899 SN_j:912009899 type: MATCHED
SN_i: 906009386 SN_j:906009386 type: MATCHED
APD类标题中枚举的声明是:
class APD
{
public:
enum MatchStateType{UNDEFINED=0,NOT_MATCHED=1, MATCHED=2};
static string MatchStateStrings[3];
MatchStateType getMatchState() const;
string getMatchStateString() const;
void setMatchState(int a_match_state);
private:
MatchStateType m_match_state;
}
和声明本身在相应的cpp文件中:
APD::MatchStateType APD::getMatchState() const
{
return m_match_state;
}
string APD::getMatchStateString() const
{
return MatchStateStrings[(int)m_match_state];
}
void APD::setMatchState(int a_match_state)
{
m_match_state=static_cast<MatchStateType>(a_match_state);
}
为什么会这样?
答案 0 :(得分:1)
你们发布的代码太多而代码不够。如果比较字符串和枚举是你的问题,你应该专注于那个,并使代码完整到足以编译。这不是那些。
那就是说,我不知道你正在使用什么类型的字符串类,但看起来你正在将枚举数值与字符串进行比较,并期望这种比较有意义。我不确定为什么要编译(猜猜:你的字符串类是否做了某种数字到字符串的转换?)
apdvec_database[j].getMatchStateString()!=APD::MATCHED
你不想调用getMatchState(),而不是getMatchStateString()吗?将枚举器(2)与“匹配”进行比较预计不相等。