bonjour la communauté
voici je teste un point du langage sur les classes
voilà le programme d’exemple
main.cpp
#include <iostream>
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}
screen.hpp
#ifndef SCREEN_H
#define SCREEN_H
#include <iostream>
#include <string>
class screen
{
friend void ges_screens::clear(ScreenIndex i);
public:
using pos = std::string::size_type;
screen() = default;
private:
mutable size_t access_ctr{ 0 };
pos cursor = 0, longueur = 0, largeur = 0;
std::string contenu;
};
ges_screens.hpp
#ifndef GES_SCREENS_H
#define GES_SCREENS_H
#include<vector>
#include "screen.h"
class ges_screens
{
public:
// ID d'emplacement pour chaque écran de la fenêtre
using ScreenIndex =std::vector<screen>::size_type;
// Réinitialisez l'écran à la position donnée sur tous les blancs.
void clear(ScreenIndex i) ;
private :
std::vector<screen> screens{};
};
#endif // GES_SCREENS_H
et ges_screens.cpp
#include "ges_screens.h"
void ges_screens::clear(ScreenIndex i)
{
screen &s = screens[i]; // s est une référence à l'écran que nous voulons effacer
s.contenu = std::string(s.longueur * s.largeur, ' '); // Réinitialisez le contenu de l'écran à tous les espaces vides.
}
le problème se situe dans screen.hpp:
le compilateur hurle::'ges_screens' n'as pas été déclaré
mais quand je remplace friend void ges_screens::clear(ScreenIndex i);
par friend class ges_screens;
le programme compile mais je voudrais que seul la fonction ges_screens::clear()
soit ami et non toute la classe.
merci d’avance pour vos éclaircissements.
Edit ache: Titre plus claire
+0
-0