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;
}
对于你需要什么呢?追逐[XY-问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? –
有两个问题:1)你是否知道成员被存储在内存地址上,相对于实例地址有偏移量,例如: 'BlockA a;'然后'&a ==&a.regA'和'&a + sizeof(int)+可能是一些填充==&a.regB' 2)1)与您想要做什么有关? ...因为tbh我根本不明白你想达到什么目的 – user463035818