Lorsque j'ai appris le C++, ils m'ont prévenu de ne pas utiliser le STL. C'était nouveau, bogué et inefficace. Récemment, je me suis trouvé en train de créer un conteneur pour un nouveau projet, et j'ai réalisé qu'il s'agissait probablement d'un cas de NIH et je devrais essayer le STL <vector>.Ancien programmeur a besoin de secrets STL
Malheureusement, cela ne fonctionne pas.
#include <stdio.h>
#include <stdlib.h>
#include <vector>
class test {
public:
int x;
};
int main(int argc,char *argv[]) {
std::vector<test> obj;
test *tmp=new test();
tmp->x=42;
obj.push_back(tmp);
}
g ++ me avertit qu'il n'y a pas de fonction concordante pour push_back, et que push_back prend const value_type & en tant que paramètre. J'ai essayé plusieurs castes pour forcer cela, mais il refuse de bouger.
J'ai maintenant perdu plus de temps à essayer de le faire de la «bonne» façon que ce qu'il aurait fallu pour écrire encore un autre conteneur et le déboguer.
Si cela ressemble à de la rage et de la frustration, vous êtes perspicace. J'ai déjà trouvé plusieurs questions comme la mienne, mais les réponses s'avèrent extraordinairement difficiles à suivre. Si c'était un site où les flammes voleraient, je m'attendrais à être grillé pour cela. Je me suis caché autour de stackoverflow pendant quelques années, et je parie qu'il y a quelqu'un qui pourrait "l'expliquer comme si j'avais cinq ans."
Y a-t-il une incantation à une seule couche pour forcer la distribution à fonctionner? Sinon, comment ces vecteurs sont-ils censés être utilisés?
Pourquoi allouez-vous tmp sur le tas? aussi: 'obj.push_back (* tmp);' – Borgleader
@Borgleader lui dites-vous de fuir l'objet? – sehe
['push_back' ne prend pas un argument de pointeur] (http://en.cppreference.com/w/cpp/container/vector/push_back). –