I am fighting with the GCC compiler, problem occurs in the constructor of the LCD class, when I try to instantiate new LCDTransmitter:
Code:
this->i2cTransmitter = new I2CTransmitter(i2cAdapter);
I get the following errors:
Error no matching function for call to 'I2CTransmitter::I2CTransmitter(I2CAdapter*&)'
Message no known conversion for argument 1 from 'I2CAdapter*' to 'const I2CTransmitter&' LCD_I2C_4bit
Message candidate expects 0 arguments, 1 provided LCD_I2C_4bit
Message I2CTransmitter::I2CTransmitter(const I2CTransmitter&)
Message I2CTransmitter::I2CTransmitter()
I don't know why compiler thinks that I am calling Copy constructor of class I2CTransmitter since I override default constuctor with a parameter object pointer of class I2CAdapter:
Code:
LCDTransmitter(I2CAdapter* i2cAdapter);
LCD.h
Code:
#include "I2CAdapter.h"
#include "I2CTransmitter.h"
#include <util/delay.h>
class LCD
{
private:
I2CTransmitter* i2cTransmitter;
uint8_t numLines;
uint8_t numColumns;
public:
LCD(I2CAdapter* i2cAdapter);
void open(uint8_t numLines, uint8_t numColumns);
int8_t writeString(const char* text);
int8_t writeCommand(uint8_t command);
int8_t setCursor(uint8_t x, uint8_t y);
private:
void checkIfBusy();
};
LCD.cpp
Code:
#include "LCD.h"
LCD::LCD(I2CAdapter* i2cAdapter)
{
this->i2cTransmitter = new I2CTransmitter(i2cAdapter);
this->writeCommand(0x33);
this->writeCommand(0x32);
this->writeCommand(0x28);
this->writeCommand(0x0E);
this->writeCommand(LCD_CLEARDISPLAY);
this->writeCommand(0x06);
this->writeCommand(LCD_FORCE_CURSOR_FIRST_LINE);
}
...
LCDTransmitter.h
Code:
class LCDTransmitter : public Writable
{
private:
I2CAdapter* i2cAdapter;
uint8_t adapterOutputPort;
public:
LCDTransmitter(I2CAdapter* i2cAdapter);
int8_t writeBytes(uint8_t* buffer, uint8_t length);
int8_t writeCommand(uint8_t command);
int8_t setCursor(uint8_t x, uint8_t y);
public:
int8_t writeByte(uint8_t byte, const uint8_t MODE);
void checkIfBusy();
};
LCDTransmitter.cpp
Code:
LCDTransmitter::LCDTransmitter (I2CAdapter* newI2cAdapter) : i2cAdapter (newI2cAdapter) { }
...
main.cpp
Code:
#include <avr/io.h>
#include <string.h>
#include "LCD.h"
#include "I2CAdapter.h"
#include "LCDTransmitter.h"
#include "SerialPort.h"
#include "I2CPort.h"
#include "util/delay.h"
int main(void)
{
I2CPort i2cPort;
I2CAdapter i2cAdapter(&i2cPort);
LCDTransmitter lcdTransmitter(&i2cAdapter);
//SerialPort Serial;
//Serial.open(9600, 0);
while (1)
{
lcdTransmitter.writeByte('A', MODE_DATA);
}
}