Hej, mam niewielki problem z przeciążaniem operatora strumienia wyjścia, i przestrzeniami nazw. Ale rzeczy się nie rozwodzić, to chyba najlepiej będzie to widoczne w przykładowym kodzie:
Plik naglowkowy, np. test_1.h
#include <iostream>
using std::ostream;
namespace name {
class Klasa {
private:
int wartosc;
int *blabla;
public:
int przypisz(int x);
friend ostream& operator<<(ostream& output, const Klasa& kl);
};
}
Teraz w oddzielnym pliku (np. test_1.cpp) chce sobie zdefiniować frienda:
using namespace std;
using namespace name;
...
ostream& operator<<(ostream& output, const Klasa& kl)
{
int *kk;
kk = kl.blabla;
if (kl.bla == NULL)
output << "puste" << endl;
output << kl.wartosc;
return output;
}
...
Niestety g++ wywala coś w stylu (linijka nr 18 to 'kk =...'):
test_1.h: In function ‘std::ostream& operator<<(std::ostream&, const name::Klasa&)’:
test_1.h error: ‘int* name::blabla’ is private
test_1.cpp error: within this context
test_1.h error: ‘int* name::blabla’ is private
test_1.cpp error: within this context
Doszedłem, że to wina przestrzeni nazw, po których wywaleniu jest już ok. I domyślam się, że jest to kwestia wstawienia gdzieś paru znaków. Niestety w projekcie nie mogę wywalić przestrzeni nazw.
Z góry dzięki za odpowiedź