2017-06-29 81 views
0

我想从struct BlockA的构造函数中访问对象regA和对象regB的成员。我希望能够从构造函数中分配给BlockA的地址为BlockA对象的每个regtype成员分配一个递增地址。我希望分配给regtype成员的地址根据其大小递增。将字符串转换为预定义的int变量名

现在,我有我的构造函数试图分配一个地址给一个字符串,这是行不通的,对吧?我也有错误说,在MemberAddress函数中,regA和regB是未定义的。

有没有办法让编译器将MemberAddress函数返回的字符串识别为BlockA中定义的成员的地址?指出你看到的其他问题也将不胜感激。

struct RegTypeA { 
    int addr ; 
    int val ; 
}; 

struct RegTypeB { 
    int addr ; 
    int val ; 
}; 


struct BlockA { 
    RegTypeA regA ; 
    RegTypeB regB ; 
    int addr; 
    BlockA(int address); 

}; 


size_t BLOCK_STRUCT_MEMBERS_TypeSize(const unsigned int idx) { 
    static const size_t sizes[] = { sizeof(RegTypeA), sizeof(RegTypeB), }; 
    if (idx < (sizeof(sizes)/sizeof(sizes[0]))) return sizes[idx]; 
     return 0; 
}; 

const char* BLOCK_STRUCT_MEMBERS_MemberAddress(const unsigned int idx) { 
     static const char * names[] = { regA.addr, regB.addr }; 
     if (idx < (sizeof(names)/sizeof(names[0]))) return names[idx]; 
      return "UNKNOWN"; 
}; 

BlockA::BlockA(int address) { 
    addr = address; 
    const int y = 1 +1 +1; 

    for (int i = 0; i < y; i++) { 
     size_t size = BLOCK_STRUCT_MEMBERS_TypeSize(i); 
     std::string regaddress = BLOCK_STRUCT_MEMBERS_MemberAddress(i); 
     regaddress = address; 
     address = address + size; 
     std::cout << address; 
    } 
} 



int main() 
{ 
    BlockA blockA1(3); 

    std::cout << blockA1.regA.addr << std::endl << blockA1.regB.addr; 

    std::cin.get(); 
    return 0; 
} 
+3

对于你需要什么呢?追逐[XY-问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? –

+0

有两个问题:1)你是否知道成员被存储在内存地址上,相对于实例地址有偏移量,例如: 'BlockA a;'然后'&a ==&a.regA'和'&a + sizeof(int)+可能是一些填充==&a.regB' 2)1)与您想要做什么有关? ...因为tbh我根本不明白你想达到什么目的 – user463035818

回答

0

我想你想:

BlockA::BlockA(int address) : 
    addr(address) 
{ 
    regA.addr = address;    // regA.addr = address + offsetof(BlockA, regA) 
    regB.addr = address + sizeof(regA); // regB.addr = address + offsetof(BlockA, regB) 
}