Hello. I'm trying to understand all of this OOP stuff but i stumbled upon a weird problem. I was trying to offload a lengthy animation along with image data to a custom class in a separate file. I debugged it all but now I'm stuck with this error:
C:\Users\Admin\Documents\Arduino\OOP_Test\src\Nijika.cpp:2215:1: error: ISO C++ forbids declaration of 'Radar' with no type [-fpermissive]
2215 | Nijika::Radar(){
| ^~~~~~
C:\Users\Admin\Documents\Arduino\OOP_Test\src\Nijika.cpp:2215:1: error: no declaration matches 'int Nijika::Radar()'
In file included from C:\Users\Admin\Documents\Arduino\OOP_Test\src\Nijika.cpp:1:
C:\Users\Admin\Documents\Arduino\OOP_Test/Nijika.h:6:30: note: candidate is: 'void Nijika::Radar()'
6 | void Radar();
| ^~~~~
C:\Users\Admin\Documents\Arduino\OOP_Test/Nijika.h:4:23: note: 'class Nijika' defined here
4 | class Nijika{
| ^~~~~~
exit status 1
Compilation error: ISO C++ forbids declaration of 'Radar' with no type [-fpermissive]
However, i do have void before Nijika::Radar(); Here's the code:
OOP_Test.ino:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Nijika.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
//int a=0;
int x=0;
int y=0;
Nijika Nijika;
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Here's a lot of image data
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Starting...");
display.display();
delay(1000);
display.setCursor(0, 16);
display.println("RAM... OK");
display.display();
delay(200);
display.setCursor(0, 32);
display.println("Graphics... OTVAL");
display.display();
delay(300);
display.setCursor(0, 48);
display.println("All systems nominal");
display.display();
delay(500);
display.clearDisplay();
display.drawBitmap(0,0, image_data_binbows, 128, 64, 1);
display.display();
delay(100);
display.clearDisplay();
display.invertDisplay(true);
delay(500);
display.invertDisplay(false);
delay(500);
display.drawBitmap(0,0, image_data_app, 128, 58, 1);
display.display();
delay(5000);
display.clearDisplay();
}
void loop() {
// put your main code here, to run repeatedly:
Nijika.Radar();
}
Nijika.h:
#pragma once
#include <Arduino.h>
class Nijika{
public:
void Radar();
private:
};
Nijika.cpp:
#include <Nijika.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//Even more image data
void Nijika::Radar(){
display.drawBitmap(19,0, image_data_1, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_2, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_3, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_4, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_5, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_6, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_7, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_8, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_9, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_10, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_11, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_12, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_13, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_14, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_15, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_16, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
display.drawBitmap(19,0, image_data_17, 89, 64, 1);
display.display();
delay(120);
display.clearDisplay();
}
Why is my void invisible to a compiler? BTW It's for ESP32 in case it's really compiler problem