D'abord pour fournir un contexte, ceci est pour une affectation impliquant des sémaphores. Nous devons trouver un code pour le problème des philosophes à manger, le faire fonctionner, puis effectuer quelques analyses et manipulations. Cependant, je suis coincé avec une erreur.Méthode Friend "non déclarée dans cette portée" en C++
Le code original provient de http://www.math-cs.gordon.edu/courses/cs322/projects/p2/dp/ en utilisant la solution C++.
L'erreur que je reçois dans Code :: Blocks est
philosopher.cpp|206|error: 'Philosopher_run' was not declared in this scope|
et cette erreur se produit dans la ligne:
if (pthread_create(&_id, NULL, (void *(*)(void *)) &Philosopher_run,
this) != 0)
J'ai regardé la méthode pthread_create mais ont été incapables de fixer cette erreur. Si quelqu'un pouvait m'expliquer comment corriger cette erreur, et aussi pourquoi cette erreur se produit, je l'apprécierais grandement. J'ai essayé de fournir seulement le code approprié. Une déclaration d'ami ne rend pas le nom de l'ami visible sans recherche dépendant de l'argument.
class Philosopher
{
private:
pthread_t _id;
int _number;
int _timeToLive;
public:
Philosopher(void) { _number = -1; _timeToLive = 0; };
Philosopher(int n, int t) { _number = n; _timeToLive = t; };
~Philosopher(void) {};
void getChopsticks(void);
void releaseChopsticks(void);
void start(void);
void wait(void);
friend void Philosopher_run(Philosopher* p);
};
void Philosopher::start(void)
// Start the thread representing the philosopher
{
if (_number < 0)
{
cerr << "Philosopher::start(): Philosopher not initialized\n";
exit(1);
}
if (pthread_create(&_id, NULL, (void *(*)(void *)) &Philosopher_run,
this) != 0)
{
cerr << "could not create thread for philosopher\n";
exit(1);
}
};
void Philosopher_run(Philosopher* philosopher)