按类检查枚举不起作用

enum checking by class does not work

本文关键字:不起作用 枚举 检查      更新时间:2023-10-16

我有类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);
}

为什么会这样?

你们都发布了太多的代码,而代码却不够。 如果你的问题是字符串和枚举的比较,你应该关注这一点,并使代码足够完整以进行编译。 这都不是。

也就是说,我无法判断您正在使用哪种字符串类,但看起来您正在将枚举器数值与字符串进行比较,并期望该比较有意义。 我不确定为什么会编译(猜猜:您的字符串类是否进行了某种数字到字符串的转换?

apdvec_database[j].getMatchStateString()!=APD::MATCHED

难道你不想调用getMatchState(),而不是getMatchStateString()吗?将枚举器 (2) 与"MATCHED"进行比较应不相等。