Следующий код работает отлично ...Как использовать/передать ссылку на «это» в функции члена абстрактного класса?
class Printable { public:
virtual size_t printTo(Print& p) const = 0;
};
class Printer : public Printable { public:
size_t printTo(Print& p) const {
return p.print("I am a printer");
}
};
Printer pp;
void loop() { Serial.println(pp); }
I am a printer
....
Однако, если я пытаюсь использовать эту новую найденную в печатные функции общественного члена Printer
..
void print() { Serial.println(this); }
это кирпичи ...
error: call of overloaded 'println(Printer* const)' is ambiguous
note: candidates are:
size_t Print::println(char) <near match>
note: no known conversion for argument 1 from 'Printer* const' to 'char'
size_t Print::println(unsigned char, int) <near match>
note: no known conversion for argument 1 from 'Printer* const' to 'unsigned char'
size_t Print::println(int, int) <near match>
note: no known conversion for argument 1 from 'Printer* const' to 'int'
и т.д., и т.д. ... Но почему не компилятор найти «кандидат» (в том же Print
заголовка, из которых Serial
является подклассом) ...
size_t println(const Printable&);
или даже
size_t println(void);
Я перепробовал все низвержен this
я мог пробуждать, без всякой магии. Невозможно ли вызывать абстрактные функции класса с помощью this
?
Для всех тех, кто требует от compilable example... here you are.
Где находится определение println? Пожалуйста, предоставьте реальный MCVE. – SergeyA
_ «Просто невозможно вызвать абстрактные функции класса с помощью' this'? »_ Нет, это вполне возможно. Пожалуйста, добавьте [MCVE], который показывает, что вы не можете на самом деле. –
Компилятор, кажется, однозначно говорит о том, что вы не объявили о перегрузке 'println', который принимает указатель на' Printer' в качестве аргумента. – Logicrat