“不匹配运营商[]”

时间:2017-11-26 14:57:17

标签: c++

我知道之前已经问过类似的问题,但我似乎无法使用其中任何一个的信息来解决我的问题。

我想要实现的目标: 我必须实现一个保存PREntry对象的表(PRTable)。我在c ++中的实现如下

class PREntry{

  public:
    PREntry()
    {   
      Timestamp = 0;
      rd_or_wr = 0;                                                                                                   
      complete = 0;
      addr = 0;                                                                                                       
    }   
    PREntry(Addr addr, Tick ts, bool rd_wr, bool complete)
    {   
      Timestamp = ts; 
      rd_or_wr = rd_wr;                                                                                               
      complete = complete;
      addr = addr;                                                                                                    
    }   

    Tick Timestamp;
    bool rd_or_wr;                                                                                                    
    bool complete;
    Addr addr;

  private :
    PREntry& operator=(const PREntry& obj); 

};

我的PRTable如下

class PRTable
{
  public:
    // Constructor
    PRTable(int number_of_PREs){
      m_number_of_PREs = number_of_PREs ;
      entry.assign(16, PREntry());
    }   

    // Destructor
    ~PRTable();

    std::vector<PREntry> entry;
    bool isComplete(MachineID mID);
    void insertRequest(Addr addr, MachineID mID, Tick ts, bool rd_wr, bool complete);
    void deleteRequest(MachineID mID);

    // Print cache contents
    void print(std::ostream& out) const;

  private:
//  PREntry *entry = new PREntry[m_number_of_PREs];
//  PREntry *entry[16];
    int m_number_of_PREs;
    PRTable& operator=(const PRTable& obj);
//    PREntry operator[](MachineID mID){return entry[mID];}
//    typedef std::map<MachineID,L1Cache_PRE> MachineIDMap;
//    MachineIDMap m_map;


};

最后是.cc文件

using namespace std;

bool
PRTable::isComplete(MachineID mID)
{
    return entry[mID].complete;
}

void
PRTable::insertRequest(Addr addr, MachineID mID, Tick ts, bool rd_wr , bool complete)
{
    PREntry pre(addr,ts,rd_wr,complete);
    entry[mID] = pre;
}

void
PRTable::deleteRequest(MachineID mID)
{
    entry[mID].complete = 1;
} 

当我运行代码时,我得到了错误,但我觉得主要问题是这个错误消息:

build/X86_MOESI_NoMig_token/mem/ruby/structures/PRTable.cc:36:14: error: no match for 'operator[]' (operand types are 'std::vector<PREntry>' and 'MachineID')
  return entry[mID].complete;

经过一些网上研究后,我发现没有为一个对象数组定义operator [],这就是为什么我决定使用向量类中已经定义了[]的向量。 任何帮助都会很棒。我想了解这样的场景通常是如何用c ++设计和编码的

0 个答案:

没有答案