2016-04-08 34 views
-1

... Bir özet sınıfındaki 'bu işlevin bir başvurusu nasıl kullanılır? Aşağıdaki kod inşaat büyük

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

....

Ancak, ben Printer bir kamu üyesi fonksiyonu içinde bu yeni bulunan yazdırılabilirliğe kullanmaya çalışırsanız ..

void print() { Serial.println(this); } 

o tuğlaları ...

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' 

vs, vs ... Ama neden değil (Serial bir alt sınıfı olduğu aynı Print başlığında,) "aday" bulma derleyici ...

size_t println(const Printable&); 

hatta

size_t println(void); 

herhangi büyü olmadan, ben uyandırmak olabilir this şöyle her döküm denedim. this ile soyut sınıf fonksiyonlarını çağırmak mümkün değil mi?

compilable example... here you are için kullanılan tüm bunlar için.

+0

println'ın tanımı nerededir? Lütfen gerçek bir MCVE sağlayın. – SergeyA

+0

_ "Bu sınıf ile soyut sınıf işlevlerini çağırmak mümkün değil mi?" _ Hayır, bu kesinlikle mümkün. Lütfen aslında yapamayacağınızı gösteren bir [MCVE] ekleyin. –

+0

Derleyici, 'Yazıcı' için bir argüman olarak bir işaretçi 'println' aşırı yüklendiğini bildirmediniz. – Logicrat

cevap

1

Eğer

void loop() { Serial.println(pp); } 

eserler, sana ihtiyacım olduğu bir tahminde gidiyorum belirtti beri:

void print() { Serial.println(*this); } 
          // ^^ Need * before "this" 

this akım nesneye bir işaretçi olduğunu. *this işaret ettiği nesnedir.

+0

Sanırım haklısın ... "Kabul edilebilir" bir kod örneği oluşturmak için acele ettim ... _just gibi bir pointer_ ve _voila_ ile çalıştım! Gerçek Arduino ortamını iki kez kontrol edeyim .. ama bence paran var. :-) –