2017-09-25 5 views
-1

Je demande donc une fonction principale: B.remove()déclaration de retour briser ma fonction C++

qui va ici m_arrays[m_oldest]->remove()

Puis enfin là:

int MyClass::remove() { 
    cout << "this is the remove function"<< endl; //debugging line 

    int lastVal = 0; 

    for (int i = start; i < capacity; i++) { //actual remove function 
     if (m_array[i] != NULL) { 
      int lastVal = m_array[i]; 
      m_array[i] = NULL;     // sets to null 
      m_size--;       //increment 
      break; 
     } 
    } 
    m_start++;         //increment 
    return lastVal; 
} 

Si je supprime le code contenant LASTVAL , la fonction fonctionne correctement. Pourquoi est-ce? Y at-il un moyen facile de résoudre ce problème? Comme vous pouvez le voir, j'essaie de renvoyer une valeur avant de la retirer du tableau. Je suis conscient que je devrais utiliser le vecteur ou une autre méthode standard, mais je ne peux pas. J'ai regardé dans mon manuel, mais je ne pouvais pas trouver ce que je cherchais. Toute aide est grandement appréciée.

+4

Veuillez publier un [mcve] afin que nous puissions voir tout ce que votre code est en train de faire qui cause le problème. La sélection que vous avez fournie n'est probablement pas suffisante pour vous signaler le vrai problème dans votre code – xaxxon

+0

@xaxxon Je n'ai pas beaucoup posté car c'est pour un projet et je ne voulais pas poster mon code réel sur internet. J'ai cependant pu recevoir une aide complète. Essaiera d'être plus complet dans le futur. –

+0

Je pense que c'était une erreur. Le doute OP voulait montrer que deux copies sont utiles – Cuber

Répondre

1

Vous avez deux instructions int lastVal dans votre code - une avant la boucle for et une dans celle-ci. Essayez de supprimer la déclaration dans la boucle for (et réglez-la sur l'affectation lastVal = m_array[i];) pour voir si cela fonctionne.