为什么会出现此“无声明匹配”错误?

时间:2020-07-06 12:11:32

标签: c++ gcc

编辑:我已经意识到,这个奇怪的错误是由于我不完全了解我所使用的文本编辑软件,并且当我认为它以某种奇怪的方式出现时,还没有完全保存我的文件。我的代码现在可以按照我的预期工作了

我最近尝试创建一个小程序以将文本写入VGA缓冲区。为此,我有一个称为terminal的特定类。然后,我尝试添加一个函数,然后出现一个奇怪的错误:

extlib / terminal.cpp:3:6:错误:没有声明匹配'void terminal :: ret1()'

这很奇怪,因为在下面的ret1文件中明确声明了terminal.h。为什么会这样?

注意:函数ret1不是原始函数,我只是将其更改为尝试调试问题,我在Cygwin上使用gcc-9.3.0,而我用来编译它的命令是:

i686-elf-g++ -c extlib/terminal.cpp -ffreestanding -O2 -Wall -Wextra -fno-exceptions -fno-rtti

terminal.h

#include "stdlib/string.h"



enum vga_colour{
  VGA_COLOUR_BLACK = 0,
  VGA_COLOUR_BLUE = 1,
  VGA_COLOUR_GREEN = 2,
  VGA_COLOUR_CYAN = 3,
  VGA_COLOUR_RED = 4,
  VGA_COLOUR_MAGENTA = 5,
  VGA_COLOUR_BROWN = 6,
  VGA_COLOUR_LIGHT_GREY = 7,
  VGA_COLOUR_DARK_GREY = 8,
  VGA_COLOUR_LIGHT_BLUE = 9,
  VGA_COLOUR_LIGHT_GREEN = 10,
  VGA_COLOUR_LIGHT_CYAN = 11,
  VGA_COLOUR_LIGHT_RED = 12,
  VGA_COLOUR_LIGHT_MAGENTA = 13,
  VGA_COLOUR_LIGHT_BROWN = 14,
  VGA_COLOUR_WHITE = 15,
};

class terminal{
public:
  terminal(vga_colour fg, vga_colour bg);
  void putText(const char* str);
private:
  void ret1();
  size_t terminal_row;
  size_t terminal_column;
  const size_t VGA_WIDTH = 80;
  const size_t VGA_HEIGHT = 25;
  uint8_t terminal_colour;
  uint16_t* terminal_buffer = (uint16_t*) 0xB8000;
  inline uint16_t vga_entry(unsigned char uc, uint8_t colour);
};

terminal.cpp:

#include "terminal.h"

void terminal::ret1(){
  return;
}

terminal::terminal(vga_colour fg, vga_colour bg){
  terminal::terminal_colour = fg | bg << 4;
  terminal::terminal_row = 0;
  terminal::terminal_column = 0;
  for(size_t y = 0; y < terminal::VGA_HEIGHT; y++){
    for(size_t x = 0; x<terminal::VGA_WIDTH; x++){
      size_t index = y * terminal::VGA_WIDTH + x;
      terminal::terminal_buffer[index] = vga_entry(' ', terminal::terminal_colour);
    }
  }
}

inline uint16_t terminal::vga_entry(unsigned char uc, uint8_t colour){
  uint16_t luc = uc;
  uint16_t lcol = colour;
  return luc | lcol << 8;
}



void terminal::putText(const char* str){
  size_t len = strlen(str);
  for(size_t i = 0; i < len; i++){
    if(str[i] == '\n'){
      terminal::terminal_row++;
      terminal::terminal_column = 0;
    }else{
      terminal::terminal_buffer[terminal::terminal_row * terminal::VGA_WIDTH + terminal::terminal_column] = vga_entry(str[i], terminal::terminal_colour);
    }
  }
}

0 个答案:

没有答案