-
déclaration en c++?
bonjour je suis débutant en c++
j'ai un probleme apparament avec la déclaration
qd je compile ca m'affiche cette erreur ( no match for 'operator*' in '**(arete + 96u)' )
ma ligne de code ou il y'a le probleme est la suivante
"arete[0].adj[0][0]=*arete[2];"
les déclarations par rapport a cette ligne sont les suivants
Arete adj[2][2] //
Arete *aretes;
aretes = new Arete[(2*nb_s)-1];
ma classe Arete est la suivante
class Arete
{
private:
Arete(const Arete &);
void operator=(const Arete &);
public:
Arete () {}
Arete *adj[2][2];
Sommet sommet[2];
Arete(Sommet s0,Sommet s1)
{
sommet[0]=s0;
sommet[1]=s1;
}
friend ostream & operator << (ostream & , Arete);
};
ostream & operator << (ostream & sortie, Arete a)
{
sortie << "[" << a.sommet[0] << " , " << a.sommet[1] << "]";
return sortie;
}
je bloque sur cette erreur si qq1 de vous peut m'aider
merci d'avance
-
Ce sera plus utile de poster sur le forum C++.
Par ailleurs, la lisibité sera accrue avec l'utilisation des balises code (le #).
Pour info, je n'ai vu vu d'include, par exemple sur les flux.
-
:tagcode:
Code:
ostream & operator << (ostream & sortie, Arete a)
Première erreur: Tu passes a par valeur, alors que tu as fais de Arete un type non-copiable (constructeur de copie privé).
-
Code:
arete[0].adj[0][0]=*arete[2];
Comment est déclaré arete ?
Tu ne nous as pas montré sa déclaration. Mais je suppose que tu as mal placé une étoile, ou mis une étoile de trop.
-
désolé
arete je l'ai déclaré comme ca (Arete *arete)
et si j'enleve juste la ligne de code arete[0].adj[0][0]=*arete[2];il n'ya plus d'erreurs
désolé mais je suis vraiment a coté en c++
Merci
-
donc, arete est de type Arete*.
À présent, de quel type est supposé être *arete[2] pour toi ?
-
ca devrait etre &arete[2] pas *arete[2]
vu comment j'ai déclaré arete
je crois que c'est ca non??
-
En fait, vu la façon dont tu as déclaré adj, ça ne peut rien être du tout: La seule façon de modifier adj, dans l'état actuel, c'est une affectation, chose que tu as interdite.
-
:salut:
en fait j'ai essayé de mettre &arete ca m'enleve l'erreur
mais je ne sais si c'est ca
en fait vous voulez dire qu'il faur que j'enleve l'interdiction de l'affectation par copie dans la classe arete c'est a dire cette ligne la
void operator=(const Arete &);???
-
...ou bien que tu déclares adj autrement (comme une matrice de pointeurs, par exemple).
-
comment on peut déclaret une matrice de pointeurs ??
-
Il suffit de déclarer :Au lieu de :Et ensuite, tu pourras mêtre &arete[2] dans une de ses cases si tu veux...