Incompatible déclaration de fonction
Je suis coincé, pourquoi j'obtiens une erreur: déclaration est incompatible...
"void A::fonction(int,int,std::vector<_Ty> *)' : la fonction membre surchargée ne trouve pas dans 'A'
error C2061: erreur de syntaxe : identificateur "vecteur"
1> avec
1> [
1> _Ty=Point
1> ]
//cpp file
void A::function(int a, int b, vector<B> *p)
{
}
//header file
class B
{
public:
int q;
};
class A
{
public:
void function(int a, int b, vector<B> *p);
};
- L'appel est maintenant la même que le prototype pourtant, il existe toujours une erreur
- Pouvez-vous poster le
A::function
decleration dans un fichier cpp? Et pourquoi est classe B? - Edit: la fonction est protégée
- Vous ne pouvez pas appeler une fonction protégée (sauf au sein de la classe ou des fils et des amis). La protection d'une fonction est un moyen pour vous permettre d'éviter de l'appeler (sauf dans les lieux mentionnés) et de le laisser être héritée.
- Edit: la fonction est maintenant public avec l'erreur
- Merci de Poster l'erreur, si possible.
- void A::fonction(int,int,std::vector<_Ty> *)' : la fonction membre surchargée ne trouve pas dans 'Un' error C2061: erreur de syntaxe : identificateur "vecteur"
- Ajouter
#include <vector>
. - comme sad_man dit, ajouter
#include <vector>
puisusing namespace std;
pour le fichier d'en-tête. peut-être aussi que vous avez écritvoid A::function(int,int,std::vector<_Ty> *)
au lieu devoid A::function(int,int,std::vector<B> *)
dans un endroit. - Ajouté using namespace std à en-tête et cela fonctionne merci
Vous devez vous connecter pour publier un commentaire.
C'est parce que l'en-tête de la fonction doit être exactement le même.
ou :
Cependant, lors de l'appel de la fonction dans le premier cas, vous devez remplacer le
*
avec&
si le passage d'un objet, de sorte que le pointeur va obtenir l'adresse de l'objet passé. Ou manuellement passer un pointeur.Les problèmes!!!!!!
void function(int a, int b, vector<B> *line);
etvoid function(int a, int b, vector<B> & line);
sont deux signatures différentes (les prototypes de fonction).Plus important encore, il n'existe pas de tels mots-clés
Class
en C++.Bien, pour commencer, il vous manque un point-virgule à la fin de
B
. En outre, vous êtes à l'aide deClass
au lieu declass
.Pour la signature elle-même, de votre déclaration (dans le fichier d'en-tête) prend un pointeur vers un
vector
pendant que votre définition (dans le.cpp
fichier) prend une référence.