2011-12-31 1 views
0

Il y a une définition de classe et certaines fonctions booléennes qui testent certains attributstravaille avec std :: bitset

class MemCmd 
    { 
     friend class Packet; 
     public: 
     enum Command 
     { 
      InvalidCmd, 
      ReadReq, 
      ReadResp, 
      NUM_MEM_CMDS 
     }; 
     private: 
     enum Attribute 
     { 
      IsRead,   
      IsWrite,    
      NeedsResponse, 
      NUM_COMMAND_ATTRIBUTES 
     }; 

     struct CommandInfo 
     { 
      const std::bitset<NUM_COMMAND_ATTRIBUTES> attributes; 
      const Command response; 
      const std::string str; 
     }; 
     static const CommandInfo commandInfo[]; 
     private: 
     bool 
     testCmdAttrib(MemCmd::Attribute attrib) const 
     { 
      return commandInfo[cmd].attributes[attrib] != 0; 
     } 
     public: 
     bool isRead() const   { return testCmdAttrib(IsRead); } 
     bool isWrite() const  { return testCmdAttrib(IsWrite); } 
     bool needsResponse() const { return testCmdAttrib(NeedsResponse); } 
    }; 

La question est de savoir comment puis-je mettre NeedsResponse à vrai ou faux avant d'appeler needsResponse()

S'il vous plaît noter que attributes est de type std::bitset

MISE À JOUR:

j'ai écrit cette fonction:

void 
setCmdAttrib(MemCmd::Attribute attrib, bool flag) 
{ 
    commandInfo[cmd].attributes[attrib] = flag; // ERROR 
} 

void setNeedsResponse(bool flag) { setCmdAttrib(NeedsResponse, flag); } 

Mais je reçois cette erreur:

error: lvalue required as left operand of assignment 
+0

Vous avez des méthodes qui obtiennent l'état des différents bits dans 'bitset'. Pourquoi ne pas simplement ajouter quelques méthodes pour définir l'état des différents bits? Ou ai-je manqué le point de la question? –

+0

vous avez raison. Comment puis je faire ça? pouvez-vous donner un extrait? – mahmood

+0

Est-ce que ce sont les devoirs? Si oui, l'indice que je donnerais est qu'ils ressembleraient probablement à 'testCmdAttrib()'. –

Répondre

1

D'après les commentaires:

Il y a deux problèmes ici

  1. membres de données qui sont const doit être initializ ed dans le constructeur de la classe.
  2. Si les membres sont const, il n'y a aucun moyen de les modifier ultérieurement.

Donc, initialisez (au moins) les membres supposés avoir une valeur constante. Supprimer const parmi les membres que vous avez l'intention de modifier plus tard.

Questions connexes