J'ai eu un comportement étrange pendant que je donnais des paramètres. L'en-tête de ma méthode est:C++ étrange paramètre passant
class Acceptability {
public:
Graph* G;
std::unordered_set<node>* community;
std::unordered_set<node>* shell;
public:
Acceptability(Graph& G, std::unordered_set<node>& community,
std::unordered_set<node>& shell);
virtual ~Acceptability();
virtual double getValue(node v) = 0;
};
class NodeClusterSimilarity: public Acceptability {
public:
NodeClusterSimilarity(Graph& G, std::unordered_set<node>& community,
std::unordered_set<node>& shell);
virtual ~NodeClusterSimilarity();
virtual double getValue(node v);
};
Les constructeurs des deux classes sont les suivantes:
GreedyCommunityExpansion::Acceptability::Acceptability(
Graph& G, std::unordered_set<node>& community,
std::unordered_set<node>& shell) {
this->G = &G;
this->community = &community;
this->shell = &shell;
}
GreedyCommunityExpansion::NodeClusterSimilarity::NodeClusterSimilarity(
Graph& G, std::unordered_set<node>& community,
std::unordered_set<node>& shell)
: Acceptability(G, community, shell) {
}
En testant ma mise en œuvre, je crée un objet de type NodeClusterSimilarity
avec community {0}
et shell {1,2,3}
. Ensuite, j'appelle la méthode getValue()
et la surprise était: taille du community
après avoir passé les paramètres est 1
(hurraaaaaaas !!!) mais la taille de la shell
était 0
: (([la valeur attendue est évidemment 3
]
Quelqu'un peut-il me dire, qu'est-ce qui ne va pas?
Veuillez publier l'implémentation de vos constructeurs. –
Il serait utile de voir aussi le code de test qui appelle ces constructeurs. –
Puisque vos constructeurs prennent des références et ne les copient pas, vous devez les appeler avec des variables qui persistent au moins aussi longtemps que vos objets. Est-ce le cas? –