Przeciazenie '<<' a przestrzenie nazw

0

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ź

0

a

friend ostream& ::operator<<(ostream& output, const Klasa& kl);
0

Po dodaniu '::' g++ wywala:

In file included from test_1.cpp:1:
test_1.h:13: error: ‘std::ostream& operator<<(std::ostream&, const name::Klasa&)’ should have been declared inside ‘::’
0

A czy nie powinieneś umieścić tego operatora wewnątrz namespace name ?

namespace name {

	ostream& operator<<(ostream& output, const Klasa& kl)
	{
		output << kl.wartosc;
		return output;
	}
}

Teraz powinno zadziałać.

0

Lol, faktycznie załapało. Czemu na to wcześniej nie wpadłem... Dzięki : )

0

też można, ale nie chciało mi się sprawdzać czy załapie :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1