• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pojedyncza funkcja nie chce sie przyjaznic a cala klasa juz tak, czemu?

Object Storage Arubacloud
0 głosów
144 wizyt
pytanie zadane 12 listopada 2017 w C i C++ przez Philip Bywalec (2,320 p.)
#pragma once
#include <iostream>
using namespace std;
class Zamowienie;
class Produkt
{
	friend int Zamowienie::kwotaZamowienia(); // chodzi o tą linie
	friend void wypisz(Zamowienie);

	string nazwa;
	int cena;
public:
	Produkt(string tmp = "Laptop");
	void get_name_price();
};

" "Zamowienie" is not a class or namespace name " - taki błąd

Problem jest taki, że chce zadeklarować przyjaźń z funkcją składową klasy "Zamowienie" a wyskakuje taki błąd. Mogę jedynie zapisać przyjaźń z całą klasą. De facto progam będzie działał tak samo, ale nie chciałbym, aby wszystkie funkcje składowe miały pełny dostęp ... Deklaracje klas mam w osobnych plikach .h. Jakieś pomysły?

1 odpowiedź

0 głosów
odpowiedź 12 listopada 2017 przez Knayder Nałogowiec (37,640 p.)
wybrane 12 listopada 2017 przez Philip
 
Najlepsza
zaincluduj ten plik nagłówkowym, w którym jest klasa. Tak jak ty zrobiłeś, można zrobić, jeżeli kompilator nie potrzebuje nic wiedzieć o klasie (metody, rozmiar itp)
komentarz 12 listopada 2017 przez Philip Bywalec (2,320 p.)
Nie mogę tak zrobić, bo już zaincludowałem klasę "Produkt" w klasie "Zamowienie". Kiedy zainkluduje plik nagłówkowy tutaj, to Visual mi nie chce przyjąć.
komentarz 12 listopada 2017 przez Philip Bywalec (2,320 p.)
Tu masz kod klasy zamowienie:

https://pastebin.com/t4FcKb4T
komentarz 12 listopada 2017 przez Knayder Nałogowiec (37,640 p.)
Generalnie to "friendowanie" nie należy do eleganckich zachowań. Nie po to coś jest prywatne, żebyś miał do tego dostęp jakoś tak na około. Osobiście nie wiem jak to można rozwiązać, oprócz usunięcia potrzeby friendowania.
komentarz 12 listopada 2017 przez Knayder Nałogowiec (37,640 p.)
Ew. zrób to na odwrót. Z tego co widzę, to w pliku zamowienie.h, używasz tylko pointera na Produkt. Zrób tak:

W pliku zamówienie.h, usuń include i dodaj "class Produkt;"
W pliku zamówienie.cpp dodaj #include "Produkt.cpp"
W pliku Produkt.h dodaj #include "Zamowienie.h"
komentarz 12 listopada 2017 przez Philip Bywalec (2,320 p.)
O cholera działa a wydawało mi się, że robiłem już w ten sposób. Dobra, dzięki.

Co do przyjaźni to jest to po prostu zadanie z laborek.

Podobne pytania

0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 9 kwietnia 2021 w C i C++ przez michal100032 Początkujący (390 p.)
+1 głos
0 odpowiedzi 162 wizyt
pytanie zadane 2 sierpnia 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
2 odpowiedzi 174 wizyt
pytanie zadane 28 maja 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...