[英]Error with Struct in C++
嘗試在C ++(Visual Studio)中執行此操作時,結構出現問題:
備忘錄
struct readMem {
UINT32 startAdress;
UINT32 endAdress;
UINT8(*memoryHandler) (UINT32);
void *pUserData;
};
struct writeMem {
UINT32 startAdress;
UINT32 endAdress;
void (*memoryHandler) (UINT32, UINT8);
void *pUserData;
};
void memoria::writeRAMBankEnable(UINT32 a, UINT8 b) {
}
void memoria::writeROMBankSelect(UINT32 a, UINT8 b) {
}
void memoria::writeRAMROMModeSelect(UINT32 a, UINT8 b) {
}
void memoria::writeVRAM(UINT32 a, UINT8 b) {
}
void memoria::writeSRAM(UINT32 a, UINT8 b) {
}
void memoria::writeRAM(UINT32 a, UINT8 b) {
}
void memoria::writeERAM(UINT32 a, UINT8 b) {
}
void memoria::writeSprite(UINT32 a, UINT8 b) {
}
void memoria::writeIOM(UINT32 a, UINT8 b) {
}
void memoria::writeHRAM(UINT32 a, UINT8 b) {
}
struct writeMem implWriteMem[] = {
{ 0x0000, 0x1FFF, writeRAMBankEnable, NULL},
{ 0x4000, 0x5FFF, writeROMBankSelect, NULL},
{ 0x6000, 0x7FFF, writeRAMROMModeSelect, NULL},
{ 0x8000, 0x9FFF, writeVRAM, NULL},
{ 0xA000, 0xBFFF, writeSRAM, NULL},
{ 0xC000, 0xDFFF, writeRAM, NULL},
{ 0xE000, 0xFDFF, writeERAM, NULL},
{ 0xFE00, 0xFE9F, writeSprite, NULL},
{ 0xFF00, 0xFF7F, writeIOM, NULL},
{ 0xFF80, 0xFFFF, writeHRAM, NULL},
{ (UINT32) - 1, (UINT32) - 1, NULL, NULL}
};
memoria.h
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include "defs.h"
ref class memoria
{
public:
memoria(void);
private:
FILE *file;
UINT8 *mem;
public:
void writeRAMBankEnable(UINT32, UINT8);
void writeROMBankSelect(UINT32, UINT8);
void writeRAMROMModeSelect(UINT32, UINT8);
void writeVRAM(UINT32, UINT8);
void writeSRAM(UINT32, UINT8);
void writeRAM(UINT32, UINT8);
void writeERAM(UINT32, UINT8);
void writeSprite(UINT32, UINT8);
void writeIOM(UINT32, UINT8);
void writeHRAM(UINT32, UINT8);
UINT8 readRAMBankEnable(UINT32);
UINT8 readROMBankSelect(UINT32);
UINT8 readRAMROMModeSelect(UINT32);
UINT8 readVRAM(UINT32);
UINT8 readSRAM(UINT32);
UINT8 readRAM(UINT32);
UINT8 readERAM(UINT32);
UINT8 readSprite(UINT32);
UINT8 readIOM(UINT32);
UINT8 readHRAM(UINT32);
void Meminitialize();
void MemcleanUp();
void writeByte(UINT32, UINT8);
UINT8 readByte(UINT32);
void writeWord(UINT32, UINT16);
UINT16 readWord(UINT32);
};
Visual Studio C ++給我這個錯誤:
1> memoria.cpp(75):錯誤C2065:'writeRAMBankEnable':未聲明的標識符
1> memoria.cpp(76):錯誤C2065:'writeROMBankSelect':未聲明的標識符
1> memoria.cpp(77):錯誤C2065:'writeRAMROMModeSelect':未聲明的標識符
1> memoria.cpp(78):錯誤C2065:'writeVRAM':未聲明的標識符
1> memoria.cpp(79):錯誤C2065:'writeSRAM':未聲明的標識符
1> memoria.cpp(80):錯誤C2065:'writeRAM':未聲明的標識符
1> memoria.cpp(81):錯誤C2065:'writeERAM':未聲明的標識符
1> memoria.cpp(82):錯誤C2065:'writeSprite':未聲明的標識符
1> memoria.cpp(83):錯誤C2065:'writeIOM':未聲明的標識符
1> memoria.cpp(84):錯誤C2065:'writeHRAM':未聲明的標識符
1> memoria.cpp(169):錯誤C2065:'implReadMem':未聲明的標識符
1> memoria.cpp(179):錯誤C2065:'implReadMem':未聲明的標識符
為了記錄在案,我在memoria.h中聲明了所有函數,當然除了結構和implWriteMem []之外。 無論如何,我該如何解決?
PS在純C語言中效果很好。
謝謝 !
{ 0x0000, 0x1FFF, writeRAMBankEnable, NULL},
你可能是說
{ 0x0000, 0x1FFF, &memoria::writeRAMBankEnable, NULL},
引用成員時,您必須包括類名,但在類內除外。 並且當指向成員函數的指針時,您始終需要類名。
最好的解決方案是使用語言內置的多態功能:
ref struct MemoryRegion abstract
{
virtual uint8_t Read( uint32_t address ) = 0;
virtual void Write( uint32_t address, uint8_t value ) = 0;
const uint32_t start_address, end_address;
protected:
MemoryRegion( uint32_t start, uint32_t end ) : start_address(start), end_address(end) {}
};
ref struct SRAM : MemoryRegion
{
SRAM( uint32_t start, uint32_t end ) : MemoryRegion(start, end) {}
virtual uint8_t Read(uint32_t address);
virtual void Write(uint32_t address, uint8_t value);
};
ref struct RAM : MemoryRegion
{
RAM( uint32_t start, uint32_t end ) : MemoryRegion(start, end) {}
virtual uint8_t Read(uint32_t address);
virtual void Write(uint32_t address, uint8_t value);
};
ref struct VRAM : MemoryRegion
{
VRAM( uint32_t start, uint32_t end ) : MemoryRegion(start, end) {}
virtual uint8_t Read(uint32_t address);
virtual void Write(uint32_t address, uint8_t value);
};
等等。 然后,您可以為基本類型創建一個句柄數組,並填寫各種特定於行為的類:
array<MemoryRegion^>^ memories = gcnew array<MemoryRegion^>(10);
memories[0] = gcnew SRAM(0xA000, 0xBFFF);
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.