2016-03-19 16 views
0

Arduino tabanlı emeklilik geri sayım saati (iş arkadaşının hediyesi) için kod yazıyorum ve bazı kodları basit bir sınıfa gruplandırdım.Bu başarısız C++ sınıf örneğinde ne gibi bir şey görüyorum?

#include "RetirementDisplay.h" 
RetirementDisplay* rd; 
rd = new RetirementDisplay(&update_lcd); 

İşin garibi, bu kod hatasız derler: Ben akımı (1.6.7) 'de derlemek zaman Arduino IDE: Bu kod yığın bana hata " 'rd' bir türünü adlandırmak gelmez hata" veriyor:

#include "RetirementDisplay.h" 
RetirementDisplay* rd = new RetirementDisplay(&update_lcd); 

Ama sonra yeni oluşturulan rd nesnenin (rd->add_screen() gibi) üyesi işlevini kullanmaya çalıştığınızda, ben aynı benim için tamamen mantıksızdır hatayı, "rd bir tür tanımlamıyor" olsun. Benim C++ süper paslı olsa da, muhtemelen buraya baktığım bir şey var.

Update_lcd yöntemi aynı dosyada daha önce tanımlanmış ve iki String argümanı aldığından, bunun hakkında üzgün olduğunu düşünmüyorum.

RetirementDisplay.h içeriği benzer şekilde basittir; "bağlantılı" (sadece birkaç printf formatı) 'nın şu anda aktif olması gerekenleri takip ederken, sadece bağlantılı bir liste ve ilgili işlevselliği bir araya getirecek birkaç kolaylık fonksiyonu var. Benim kabataslak adlandırma kuralıma beni yargılama; Bunun hızlı bir proje olması gerekiyordu. ;)

bu hat bir atama deyimi olması amaçlanmıştır gibi görünüyor
#ifndef RetirementDisplay_h 
#define RetirementDisplay_h 

#include "RetirementScreen.h" 
class RetirementDisplay { 
protected: 
    RetirementScreen* head; 
    RetirementScreen* current; 
    void (*updater)(String, String); 
public: 
    RetirementDisplay(void(*)(String,String)); 
    void add_screen(RetirementScreen*); 
    void update(); 
    void next(); 
    void prev(); 
}; 

#endif 
+0

Herhangi bir nedenin 'add_screen' başlıkta bir alt çizgi ve onu kullanmaya çalıştığınızda iki tane var mı? Kullanmaya çalıştığınız tam bir dosya verebilir misiniz ve kırılır mı? – user2357112

+0

Dosya kapsamındaki ifadeleriniz olamaz. Orada sadece beyanlar görünebilir; ifadeler bir işlev içinde olmalıdır. 'rd = new RetirementDisplay (& update_lcd);' bir ifadedir. RetirementDisplay * rd = new RetirementDisplay (& update_lcd); 'bir başlatıcı ile bir bildiridir. –

+0

İki alt çizgi, çünkü bugün 13 saat çalıştım ve yazı parmaklarım biraz taslak. :) Sabit. – dannysauer

cevap

3

:

rd = new RetirementDisplay(&update_lcd); 

ama ifadeleri böyle iç fonksiyonları, olmalıdır:

#include "RetirementDisplay.h" 

void myfunction() 
{ 
    RetirementDisplay* rd; 
    rd = new RetirementDisplay(&update_lcd); 
} 

Ancak, değişken tanımlama işlevleri dışında olabilir, bu yüzden bu satırda bir hata alamıyorsunuz:

RetirementDisplay* rd = new RetirementDisplay(&update_lcd); 
+0

Tamam, bu yapardı. Arduino ortamında gerçekten gitmesi gereken setup() yönteminin dışında başlatma başlatma öğelerinin tuzağına düştüm. Thamks. :) – dannysauer

+0

Thamks? İç çekmek. : / – dannysauer

İlgili konular