2016-03-24 25 views
0

Arkadaşım hakkında bir şeyler öğrenmeye başladım. Öğreticiden birini izledim, ancak kodun çalışmasını sağlayamadım. Sanırım oldukça fazla hata aldım.arkadaş İşlev - özel alana erişemiyor C++

benim Kod:

#include <iostream> 

using namespace std; 

class Sale 
{ 
friend ostream& operator << (ostream, const Sale&); 
int receiptNum; 
double salesAmt; 
public: 
    Sale(int,double); 
}; 

Sale::Sale(int num,double sale) 
{ 
    receiptNum = num; 
    salesAmt = sale; 
} 

ostream operator << (ostream& out,const Sale aSale) 
{ 
    out << "Sale #" << aSale.receiptNum << " for $ " << aSale.salesAmt << endl; 
    return out; 
} 

int main() 
{ 
    Sale aShirt(1567,39.95); 
    cout << aShirt; 
    return 0; 

} 

Hata

error: In function 'std::ostream operator<<(std::ostream&, Sale)' 
error: 'int Sale::receiptNum' is private 
error: 'double Sale::salesAmt' is private 
error: 'std::ios_base::ios_base(const std::ios_base&)' is private 
error: within this context| 
error: ambiguous overload for 'operator<<' in 'std::cout << aShirt' 

Teşekkür

+2

İmzalar eşleşmiyor: => 'friend ostream & operatörü << (ostream &, const Satış &);' ve => 'ostream & operatör << (ostream & out, const Satış aSale) {' –

+0

Veriler çağrıldı C++ üyeler. – Simple

cevap

2

arkadaş fonksiyonu ve uygulamada farklı bir imzayla tanımlanmıştır. Yani bu farklı (aşırı) işlevler şunlardır:

friend ostream& operator << (ostream, const Sale&); 
... 
ostream operator << (ostream& out,const Sale aSale) { ... } 

Sen aynı işlevin konuşurken sizin derleyici açıklığa kavuşturmak, hem imzaları hizalamak zorunda:

friend ostream& operator << (ostream&, const Sale&); 
... 
ostream& operator << (ostream& out,const Sale &aSale) { ... } 
İşte

online demo o beklediğiniz gibi çalışır.

+0

Merhaba, aynı hata hala devam ediyor – stack

+0

@stack Sadece, yoy'un ayrıca argüman argümanı ve dönüş tipi için bir referans/değer uyuşmazlığı olduğunu fark ettim. Cevabımı buna göre düzenledim. – Christophe

+0

omg! öğretici nasıl yaptım, aksi halde yaptım – stack

İlgili konular