//i'm sorry //pervert forwarding //didn't know (or was to lazy) to find another fix #define __CPU__H__ class CCpu; #include "cpmem.hpp" using namespace std; template void CPMem::set(const MEMORY_ADDRESS address, const T data) { if(address >= MAX_MEMORY) { stringstream error; error << "memoryaddress " << address << " out of range"; throw out_of_range(error.str()); } MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT; auto iter = m_memory.begin(); while(temp > 0) { ++iter; temp--; } iter = m_memory.insert(iter, data); ++iter; m_memory.erase(iter); } template T CPMem::get(const MEMORY_ADDRESS address) const { if(address >= MAX_MEMORY) { stringstream error; error << "memoryaddress " << address << " out of range"; throw out_of_range(error.str()); } MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT; return m_memory[temp]; } template CPMem::~CPMem() { for(auto iter = m_memory.begin(); iter != m_memory.end(); ++iter) { delete (*iter); } } template class CPMem;