Comment fixer le compilateur C++ d'erreur “impossible de convertir de 'Type' à 'const Type*'”?
C'est le message d'erreur:
erreur: impossible de convertir de 'MyTime' à 'const MyTime*' for argument '1' to 'int DetermineElapsedTime(const MyTime*, const MyTime*)'|
Et c'est mon code:
#include <iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct MyTime { int hours, minutes, seconds; };
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2);
const int hourSeconds = 3600;
const int minSeconds = 60;
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
{
long timeDiff = ((((t2->hours * hourSeconds) + (t2->minutes * minSeconds) + t2->seconds) -
((t1->hours * hourSeconds) + (t1->minutes * minSeconds) + t1->seconds)));
return(timeDiff);
}
int main(void)
{
char delim1, delim2;
MyTime tm, tm2;
cout << "Input two formats for the time. Separate each with a space. Ex: hr:min:sec\n";
cin >> tm.hours >> delim1 >> tm.minutes >> delim2 >> tm.seconds;
cin >> tm2.hours >> delim1 >> tm2.minutes >> delim2 >> tm2.seconds;
DetermineElapsedTime(tm, tm2);
return 0;
}
Est-il possible que je peux résoudre ce problème? N'hésitez pas à signaler d'autres erreurs que vous voyez. Je ne sais à propos de fixation DetermineTimeElapsed correctement la sortie de la hr:min:sec format. mais pour l'instant, j'ai besoin de sortir de cette.
- DetermineElapsedTime(tm, tm2); attend de pointeurs
- Hmm. Ok, je vois. J'ai donc changer DetermineElapsedTime(tm, tm2); à DetermineElapsedTime(&tm, &tm2); de toute façon qui est en bas à droit de vote, quel est le problème avec la question?
- Parfaitement les bonnes questions descendre voté, sans explication, tout le temps. Votre question semble meilleure que la moyenne pour moi. Peut-être que la note de panique dans la question du titre? Ce n'est pas un problème majeur, car au moins.
- Je vous remercie d'être raisonnable.
Vous devez vous connecter pour publier un commentaire.
L'erreur doit être au-dessous de la ligne:
Vous êtes de passage à
MyTime
objets à la fonction ci-dessus lorsqu'il s'attend à ceconst MyTime*
.Fixer par le passage de l'objet adresses:
Ou mieux C++ façon: en changeant la fonction prototype d'accepter les références de l'objet:
le corps aussi sera modifié en conséquence; par exemple,
->
sera remplacé par.
de l'opérateur et ainsi de suite.La fonction attend un pointeur à 2 variables, mais vous êtes de passage variables elles-mêmes, qui est la question. Vous résoudre ce problème en passant un pointeur vers les variables par juste de passage de leurs adresses de la mémoire à l'aide de la
&
opérateur comme indiqué ci-dessousAlternativement, vous pouvez changer la fonction de recevoir des références à des variables comme @iammilind suggère, ce qui signifie que vous pouvez laisser la ligne ci-dessus comme il était. Ce serait plus sûr, plus propre, plus "C++" façon.
Votre fonction
DetermineElapsedTime
attend des pointeurs versMyTime
.Modifier votre code pour:
La
&
opérateur dans ce contexte, signifie "obtenir l'adresse de"Votre une fonction doit prendre deux pointeurs const:
Maintenant, voici comment vous l'appeler:
Comme vous le voyez, vous êtes de passage les variables par valeur au lieu de passer par un pointeur de fonction pourrait s'attendre. Vous pouvez le fixer dans un couple des manières:
modifier la fonction d'attendre const référence:
prendre l'adresse des variables qui sont passés:
allouer les choses de manière dynamique et de passer des pointeurs: