Sorum şu anda arkadaşlık fonksiyonları ile ilgili olarak < < ve >>. Anlayışımdan, arkadaş fonksiyonlarının doğrudan özel üye değişkenlerine erişebildiğini (ve yapması gerektiğini) düşündüm. Ancak burada sahip olduğum durumda, derleyici, her özel değişkeni elde etmek için "get" işlevlerini kullandığımda yalnızca .cxx dosyasını kabul ederdi.C++ arkadaş fonksiyonu - operatör aşırı yükleme istream >>
İşte benim başlık dosyası İşte
class BigNum
public:
// CONSTRUCTORS and DESTRUCTORS
BigNum();
BigNum(int num, size_t optional_base = 10);
BigNum(const char strin[], size_t optional_base = 10);
// MEMBER FUNCTIONS
size_t get_digit(size_t index) const;
size_t get_used() const;
size_t get_capacity() const;
size_t get_base() const;
bool get_sign() const;
// FRIEND FUNCTIONS
friend std::ostream& operator<<(std::ostream &os, const BigNum &bignum);
friend std::istream& operator>>(std::istream &is, BigNum &bignum);
private:
size_t base;
size_t *digits;
bool positive;
size_t used;
olduğu arkadaş uygulamaları ile benim tekabül .CXX dosya yukarıdaki arkadaş operatörleri doğru derlenmiş bu konuda
#include "file.h"
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
std::ostream& operator <<(std::ostream &os, const BigNum &bignum)
{
if (bignum.get_sign() == false)
os << '-';
for (size_t i = 0; i < bignum.get_used(); ++i)
os << bignum.get_digit(bignum.get_used() - i - 1);
return os;
}
std::istream& operator >>(std::istream &is, BigNum &bignum)
{
for (size_t i = 0; i < bignum.get_used(); ++i)
is >> bignum.digits[i];
return is;
}
Yani çalışır. Ancak neden benim operatör >> doğrudan bir özel değişkeni erişebilmeleri öyle (>> olduğu bignum.digits [i]), ancak özel değişkenlerin kalanı 'olsun işlevleri' Aşağıda
, zaman tarafından erişime ihtiyaç duyulan Ben (Ben arkadaş düzgün özel değişkenleri çağırmalıdır düşünce nasıl) bu konuda aşırı yük operatörleri yazmayı deneyin: Ben şu hataları elde
std::ostream& operator <<(std::ostream &os, const BigNum &bignum)
{
if (bignum.positive == false)
os << '-';
for (size_t i = 0; i < bignum.used; ++i)
os << bignum.digits[used - i - 1];
return os;
}
std::istream& operator >>(std::istream &is, BigNum &bignum)
{
for (size_t i = 0; i < bignum.used); ++i)
is >> bignum.digits[i];
return is;
}
.
BigNum2.cxx: In function `std::ostream&
csci2270_hw1B::operator<<(std::ostream&, const csci2270_hw1B::BigNum&)':
BigNum2.cxx:201: error: `used' undeclared (first use this function)
BigNum2.cxx:201: error: (Each undeclared identifier is reported only once for
each function it appears in.)
BigNum2.cxx: In function `std::istream&
csci2270_hw1B::operator>>(std::istream&, csci2270_hw1B::BigNum&)':
BigNum2.cxx:208: error: syntax error before `)' token
kullanıyorum derleyici ++ (Versiyon 3.3.1) gramdır. Herhangi bir yardım takdir, teşekkür ederim.
Revize: bignum nesne özel değişkenlere erişmek böylece
Ben kodu güncellendi. < <'u aşırı yükleyen arkadaş operatörüne aşağıdakileri yaptım ve iyi bir şekilde derledim. Yorumlarınız için teşekkürler, bu bir çaylak hatasıydı. >> operatörü
BigNum2.cxx için
std::ostream& operator <<(std::ostream &os, const BigNum &bignum)
{
if (bignum.positive == false)
os << '-';
for (size_t i = 0; i < bignum.used; ++i)
os << bignum.digits[bignum.used - i - 1];
return os;
}
Ancak derleyici hala üretiyor hataları: belirteç fonksiyonu std::istream& csci2270_hw1B::operator>>(std::istream&, csci2270_hw1B::BigNum&)': BigNum2.cxx:208: error: syntax error before
)'
>> Bir sayı ve özel olarak okumak gerekiyordu 'kullanılan' üye değişkeni dizinin uzunluğunu kaydetmesi gerekiyor.
std::istream& operator >>(std::istream &is, BigNum &bignum)
{
for (size_t i = 0; i < bignum.used); ++i)
is >> bignum.digits[i];
return is;
}
Herhangi düşünceler: aksine ben hala derleyici
std::istream& operator >>(std::istream &is, BigNum &bignum)
{
for (size_t i = 0; i < bignum.get_used()); ++i)
is >> bignum.digits[i];
return is;
}
kabul neden biraz karıştı? Teşekkürler.
'" file.h "' nedir? – GManNickG