2016-09-09 6 views
0

Ich habe kürzlich den Titelfehler bekommen und ich bin mir nicht ganz sicher, was ich falsch mache, hat jemand irgendwelche Ideen? ein entsprechender Code unterArgument des Typs Uint8_t ist nicht kompatibel mit Parameter des Typs char *

Rom.h

//Rom.h 
#pragma once 
#include <fstream> 
struct ROM { 
    uint8_t* memblock; 
    std::fstream rom; 
    std::streampos size; 
    int flag; 

    void ROM::LoadROM(std::string path, int flag); 
    void ROM::BinaryDump(std::string path, std::streampos size); 
} 

Rom.cpp

//Rom.cpp 
#include <iostream> 
#include "Rom.h" 

void ROM::LoadROM(std::string path, int flag) { 
    this->rom.open(path, std::ios::in | std::ios::binary | std::ios::ate); 

    if (rom.is_open()) { 
    this->size = rom.tellg(); 
    std::cout << "\nThe Rom is " << rom.tellg() << " byte(s) long." << std::endl; 
    this->memblock = new uint8_t[(unsigned int)this->size]; 
    std::cout << rom.tellg() << " Bytes of memory have been allocated" << std::endl; 
    rom.seekg(0, std::ios::beg); 
    rom.read(this->memblock, (unsigned int)this->size); 
    std::cout << "The contents of the file are stored in memory" << std::endl; 
    rom.close(); 
    if (flag == 0) { 
    } 
    else { 
     BinaryDump(path, this->size); 
    } 
    } 
} 

void ROM::BinaryDump(std::string path, std::streampos size) { 
    std::fstream binDump(path, std::ios::out | std::ios::binary); 

    binDump.write(this->memblock, size); 
    delete[] this->memblock; 
    binDump.close(); 
    std::cout << "The ROM has been dumped" << std::endl; 
} 

Sorry, wenn dies ganz offensichtlich ist, aber ich fühle mich hier verloren.

+0

Compiler sagen Ihnen normalerweise, auf welcher * Zeile * ein Fehler auftritt. Verwenden Sie die Kraft, junge Padawan :-) – paxdiablo

+0

Bitte zeigen Sie die genaue Fehlermeldung und geben Sie an, welche Quellzeile entspricht –

+0

Nicht mit der Frage verwandt, aber Ihre Klasse verletzt die Regel der Drei. Um dies zu beheben, verwenden Sie 'vector ' statt 'uint8_t *'. –

Antwort

1

uint8_t und char sind verschiedene Arten. (Nun - das ist systemabhängig, aber auf Ihrem System sind sie anders). Sie können die beiden Namen nicht synonym verwenden.

Ihre Frage nicht erwähnt, welche Zeile den Fehler ergab, aber wenn Sie das nachschlagen, werden Sie feststellen, dass Sie uint8_t * übergeben, wobei die Funktion tatsächlich char * erwartet.

Ich denke, es wäre rom.read. Wenn ja, dann könnte man das Problem mit beheben:

rom.read(reinterpret_cast<char *>(memblock), size); 

Sie brauchen keine redundanten unsigned int Abgüsse oder this-> Präfixe zu verwenden. Eine andere mögliche Lösung wäre memblock vom Typ char * zu machen.

+0

'reinterpret_cast (memblock)' <- ist das sicher? – deW1

+0

@ deW1 Ja, es wird sicher –

+0

schießen, völlig vergessen, die Zeilennummer geben, danke! – user2751351

Verwandte Themen