2017-06-29 65 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) 
}