2014-09-19 6 views
0

J'ai deux classes comme celui-ci driver.cpp qui ont la méthode vide loadFile appeler une autre méthode int initialDragonXPos de util.cppconversion non valide de 'int (*)()' à 'int' [-fpermissive]

int loadFile(Dragon * dragons) 
{ 
    int index = 0; 
    index++; 
    dragons[index].setPosX(initialDragonXPos); 
} 

et méthode int initialDragonXPos comme celui-ci

int initialDragonXPos() 
{ 
    int pos = rand() % (MAX_DRAGON_XPOS * 2); 
    pos = pos + MIN_DRAGON_XPOS; 

    return pos; 
} 

Et c'est setPosX méthode

void Dragon::setPosX(int posX) 
{ 
    this->posX = posX; 
} 

J'obtiens l'erreur: conversion non valide de « int (*)() » à « int » [-fpermissive]. Alors, comment je peux le réparer

+2

Vous devez ** ** appel d'une fonction pour obtenir sa valeur de retour ... même si elle ne prend aucun argument. Sinon, vous obtenez simplement son adresse, qui est bien sûr un type différent. – Deduplicator

+0

Et si 'index ++' est hors limites pour 'dragons'? Vous devriez vérifier cela (ou de préférence utiliser une classe de conteneur C++, comme 'std :: vector'). – crashmstr

+0

@crashmstr: 'std :: vector' ne vérifie normalement pas en mode release. – Deduplicator

Répondre

2

Votre ligne dragons[index].setPosX(initialDragonXPos); tente d'assigner l'adresse de la fonction initialDragonXPos qui provoque une erreur de compilation due à des types dépareillées.

Vous devez appeler la fonction. Changer à:

dragons[index].setPosX(initialDragonXPos());

+0

Sr. Je ne comprends toujours pas. Peux-tu me montrer. Je pensais que le paramètre setPosX avait besoin du paramètre INT et que initialDragonXPos renvoyait INT, donc cela semblait correct mais pas @Bathsheba –

+1

'initialDragonXPos()' * renvoie * un 'int' qui est passé à' setPosX'. Regardez ma réponse attentivement. Notez bien le '()' juste après 'initialDragonXPos'. – Bathsheba

+0

Merci beaucoup. Sr Je n'ai pas regardé attentivement votre commentaire. Haha c'est la toute première fois que je suis dans cette communauté. Merci beaucoup –