J'ai la classe suivante avec des fonctions amies couple:fonctions ami non reconnu
class Teleport
{
public:
Teleport();
~Teleport();
void display();
Location teleportFrom(int direction);
friend bool overlap(Wall * wall, Teleport * teleport);
friend bool overlap(Location location);
friend bool overlap(Wall * wall);
friend bool overlap();
Location location;
static vector<Teleport *> teleports;
private:
int currentTeleport;
};
bool overlapT(vector<Wall *> walls);
Quand je mets la dernière fonction en fonction ami dans la classe comme ceci:
class Teleport
{
public:
//...same functions as before...
friend bool overlapT(vector<Wall *> walls);
//... same functions as before...
private:
//... same functions as before...
}
Le code produit une erreur supplémentaire overlapT was not declared in this scope
dans main.cpp. Comme pour les autres fonctions de chevauchement (qui sont surchargées dans d'autres fichiers), j'obtiens des erreurs similaires quand elles sont des fonctions d'amis dans la classe: error: no matching function for call to 'overlap()'
. J'ai utilisé des fonctions d'ami dans ce que je crois être la même manière dans un autre dossier, et n'ai aucune erreur de compilateur. Qu'est-ce qui pourrait causer cette étrange erreur?
Bon, j'ai un petit programme qui illustre cette erreur!
main.cpp
#include <iostream>
#include "Teleport.h"
using namespace std;
int main()
{
Teleport teleport;
isTrue();
isNotTrue();
isTrue(1);
return 0;
}
Teleport.h
#ifndef TELEPORT_H
#define TELEPORT_H
class Teleport
{
public:
Teleport();
virtual ~Teleport();
friend bool isTrue();
friend bool isNotTrue();
private:
bool veracity;
};
bool isTrue(int a); //useless param, just there to see if anything happens
#endif // TELEPORT_H
teleport.cpp
#include "Teleport.h"
//bool Teleport::veracity;
Teleport::Teleport()
{
veracity = true;
}
Teleport::~Teleport()
{
//dtor
}
bool isTrue()
{
return Teleport::veracity;
}
bool isNotTrue()
{
return !Teleport::veracity;
}
bool isTrue(int a)
{
if(isTrue())
return true;
else
return isNotTrue();
}
des erreurs de compilation:
error: too few arguments to function 'bool isTrue(int)'
error: at this point in file
error: 'isNotTrue' was not declared in this scope
Je soupçonne que les variables statiques peuvent avoir quelque chose à voir avec cela, car mes autres classes sans variables statiques fonctionnent très bien.
EDIT: En fait, il semble que les variables statiques ne posent pas de problème. Je viens de supprimer le mot-clé static
de la définition de classe Teleport/quel que soit son nom ?, et commenté bool Teleport::veracity;
; néanmoins, je reçois toujours les deux erreurs
Pouvez-vous poster un exemple complet (mais minime) qui reproduit le problème? Je soupçonne que cela pourrait être un problème d'espace de noms, mais il est impossible de dire ce qui se passe sans voir plus de code. –
@aaa carpe - cela fonctionne pour 'overlapT()', si je le mets avant ou après la classe – wrongusername
@Adam Rosenfield - Je peux essayer, mais juste pour que vous sachiez, je n'ai pas déclaré d'espaces de noms, et j'utilise seulement 'std' – wrongusername