erreur C2064: terme n'évalue pas à une fonction prenant 0 arguments
tout le monde!
Je maintiens un groupe de canaux de données dans une carte contenant, à partir de laquelle un individu canal de données peut être consultée par ses channle nom. Par rapport à cela, j'écris une fonction simple GetIRChannelData
(veuillez consulter le code suivant). Lorsque compliing, la déclaration pusIRChannelData = cit->second();
avaient envoyé une erreur, qui a lu
error C2064: term does not evaluate to a function taking 0 arguments
Tous la fonction de faire n'est rien, mais à la recherche d'un nom de canal/ID de la carte de conteneurs, et de l'affecter les données pointeur vers un pointeur temporel, le cas échéant. Veuillez s'il vous plaît me montrer quel est le problème?
const Array2D<unsigned short>* GetIRChannelData(std::string sChannelName) const
{
const Array2D<unsigned short>* pusIRChannelData = NULL;
for (std::map<std::string, Array2D<unsigned short>* >::const_iterator cit = m_usIRDataPool.begin(); cit != m_usIRDataPool.end(); ++cit)
{
std::string sKey = cit->first;
if (sKey == sChannelName)
{
pusIRChannelData = cit->second(); //Error occurred on this line
break;
}
}
return pusIRChannelData;
}
Une raison particulière vous ne l'utilisez pas
Comme une note de côté, de type alias vraiment aider à rendre le code plus lisible:
std::map
's find
méthode au lieu de passer en boucle sur tous les éléments de la recherche de la clé?Comme une note de côté, de type alias vraiment aider à rendre le code plus lisible:
typedef std::map<...> DataPool; for (DataPool::const_iterator ...
.OriginalL'auteur GoldenLee | 2011-07-03
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur est assez clair... vous appelez une fonction qui n'existe pas.
map::iterator
points pour unstd::pair
, qui a deux objets membres,first
etsecond
. Notez que ce ne sont pas des fonctions. Supprimer la()
de la ligne en question et l'erreur devrait disparaître.std::map
itérateur, non?first
est la clé, qui est déclarée commestd::string
, etsecond
est la valeur.Oui, j'ai mal lu la boucle initialement, a pensé qu'il était de parcourir la carte du type de la valeur. Devrait être bon maintenant.
Merci à vous, Dennis. J'ai fait de bas grade erreur!
Il est intéressant de noter que
std::pair
seulement ne doit pas contenir des pointeurs de fonction ou de foncteurs dans ce cas particulier. Considérons par exemplestd::map<std::string, void (*)()>
.Non, le message d'erreur est obscure, surtout pour les débutants. Un message clair serait quelque chose comme "std::pair n'a pas de fonction deuxième()'. Vouliez-vous dire de la variable membre "second"?"
OriginalL'auteur Dennis Zickefoose
Il ressemble
cit->second
ne permettant pas d'identifier un pointeur de fonction. La définition de votre itérateur prétend que c'est un pointeur vers(Array2D<unsigned short>)
;pusIRChannelData
est un(Array2D *)
, alors vous voudrez probablementcit->second
au lieu decit->second()
(qui tente d'invoquer votre(Array2D *)
comme une fonction).OriginalL'auteur geekosaur