首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用std::bitset

使用std::bitset
EN

Stack Overflow用户
提问于 2011-12-31 08:08:45
回答 1查看 561关注 0票数 0

有一个类定义和一些bool函数来测试一些属性。

代码语言:javascript
复制
  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); }
  };

问题是如何在调用NeedsResponse之前将needsResponse()设置为true或false

请注意,attributesstd::bitset类型的

更新:

我写了这个函数:

代码语言:javascript
复制
void
setCmdAttrib(MemCmd::Attribute attrib, bool flag) 
{
    commandInfo[cmd].attributes[attrib] = flag;   // ERROR
}

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

但我知道这个错误:

代码语言:javascript
复制
error: lvalue required as left operand of assignment
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-31 12:57:27

从评论中:

这里有两个问题

必须在constructor.

  • If类中初始化属于const
  1. 数据成员,成员是const,以后无法更改它们。

因此,初始化(至少)应该具有常量值的成员。从您以后要更改的成员中删除const

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8687106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档