C++ Valide l'utilisation de la fonction de membre, vous avez oublié le ( )?
Je suis en train de travailler sur une mission où je créer mon propre conteneur à l'aide de modèles. Le conteneur, je suis amené à utiliser est appelé Smaph, qui prend en deux paires de chiffres et de fait une variété de fonctions avec eux. Je suis seulement permis de faire un fichier d'en-tête pour cette mission. J'ai créé une liée individuellement classe evier, qui prend un argument de modèle.
Actuellement, je suis en train d'essayer d'obtenir une sensation pour les modèles, et d'apprendre à les utiliser, donc j'ai un exemple très simple j'espérais que vous pourriez m'aider avec. J'ai un push_back fonction dans ma liste individuellement liée classe pour ajouter à mes modèles. Pour une raison quelconque, je ne peux pas ajouter des choses à mon evier parce que je reçois une erreur de compilation qui dit, Invalide l'utilisation de la fonction de membre, (push_back), avez-vous oublié l' ( )? Quelqu'un peut m'expliquer pourquoi j'obtiens cette erreur?
Merci!!!!
template <typename T>
class slink {
private:
struct node {
T datum;
struct node *next;
};
node *head, *tail;
public:
slink() : head(0), tail(0) {
}
~slink() {
clear();
}
void push_back(const T &datum) {
node *p = new node;
p->datum = datum;
p->next = 0;
if (!tail)
head = p;
else
tail->next = p;
tail = p;
}
template <typename Tfirst, typename Tsecond>
class Smaph {
public:
Smaph();
~Smaph();
Smaph(const Tfirst a, const Tsecond b) {
std::pair<Tfirst, Tsecond> pair1(a, b);
s.push_back(pair1);
}
private:
slink<std::pair<Tfirst, Tsecond> > s();
};
Et enfin, mon principal pour tester mon programme. Tout ce que je veux maintenant, c'est l'ajout de ces deux nombres pour ma seule liste liée par le biais de mon Smaph.
int main() {
Smaph<int, double> s(3, 6.3);
}
- Il serait utile de publier le code d'erreur complet, avec la ligne fautive.
- Épineux parse, etc.
Vous devez vous connecter pour publier un commentaire.
C'est une déclaration d'une fonction appelée
s
qui ne prend pas d'arguments et retourne unslink<std::pair<Tfirst, Tsecond> >
. Lorsque le compilateur voit que vous nes.push_back(pair1);
, il se demande ce que vous essayez de faire de cette pauvre fonction. Supprimer la()
pour en faire un membre de données:s
sera par défaut construit automatiquement au début du constructeur.Sur cette ligne, vous n':
C'est la déclaration d'une fonction nommée
s
qui renvoieslink<std::pair<Tfirst, Tsecond> >
. Mais alors vous avez fait cela à l'intérieur de l'un de vos fonctions de membre:Qui n'est pas droit, c'est pourquoi votre compilateur vous avertit de l'utilisation incorrecte de cette fonction membre.
À corriger, supprimer les paramètres: