类型uint8_t的参数与char *类型的参数不兼容

时间:2016-09-09 02:26:33

标签: c++ char type-conversion uint8t

我最近得到了标题错误,而且我不太确定我做错了什么,有人有什么想法吗?以下相关代码

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;
}

对不起,如果这是完全明显的,但我觉得在这里迷路了。

1 个答案:

答案 0 :(得分:1)

uint8_tchar是不同的类型。 (嗯 - 这取决于系统,但在你的系统上它们是不同的)。你不能互换地使用这两个名字。

你的问题没有提到哪一行给出了错误,但是如果你仔细查看,你会发现你正在通过uint8_t *实际上函数期望char *

我想这将是rom.read。如果是这样,那么你可以解决问题:

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

您无需使用多余的unsigned int强制转换或this->前缀。

另一种可能的解决方案是让memblock具有char *类型。