Conteneur CList dans aplication du type paint

andarius40 Messages postés 12 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 novembre 2005 - 22 juin 2004 à 17:20
andarius40 Messages postés 12 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 novembre 2005 - 23 juin 2004 à 21:15
bonjour,

j'apprends le c++ avec le livre visual c++ 6 de ivor horton.
(J'en suis au chapitre 6 pour ceux qui ont le livre)

Lorsque je compile le programme j'ai des erreurs. Les voicis

Compiling...
Elements.cpp
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2143: syntax error : missing ';' before '<'
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2501: 'CList' : missing storage-class or type specifiers
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2059: syntax error : '<'
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2238: unexpected token(s) preceding ';'
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(135) : error C2065: 'm_PointList' : undeclared identifier
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(135) : error C2228: left of '.AddTail' must have class/struct/union type
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(136) : error C2228: left of '.AddTail' must have class/struct/union type
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(147) : error C2228: left of '.AddTail' must have class/struct/union type
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(172) : error C2228: left of '.GetHeadPosition' must have class/struct/union type
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(176) : error C2228: left of '.GetNext' must have class/struct/union type
E:\C++\Chapitre16\Exemple\Sketcher\Elements.cpp(180) : error C2228: left of '.GetNext' must have class/struct/union type
SketcherView.cpp
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2143: syntax error : missing ';' before '<'
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2501: 'CList' : missing storage-class or type specifiers
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2059: syntax error : '<'
e:\c++\chapitre16\exemple\sketcher\elements.h(82) : error C2238: unexpected token(s) preceding ';'
Generating Code...
Error executing cl.exe.

Sketcher.exe - 15 error(s), 0 warning(s)

et je vous donnes les fichiers dans les quels il y a des erreurs.

elements.h

#if !defined(Elements_h) #define Elements_h // Classe d'éléments générique class CElement : public CObject { protected: COLORREF m_Color; // Couleur d'un élément CRect m_EnclosingRect; // Rectangle englobant un élément int m_Pen; // Epaisseur de la plume public: virtual ~CElement(){} // Destructeur virtuel // Opération de dessin virtuelle virtual void Draw(CDC* pDC) const {} // Opération de dessin virtuelle CRect GetBoundRect() const; // Obtient le rectangle englobant d'un élément protected: CElement(){} //Constructeur par défaut }; // Classe définissant un objet ligne class CLine : public CElement { public: virtual void Draw(CDC* pDC) const; // Fonction affichant une ligne // Constructeur pour un objet ligne CLine(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth); protected: CPoint m_StartPoint; // Première extrémité de la ligne CPoint m_EndPoint; // Seconde extrémité de la ligne CLine(){} // Constructeur par défaut - à ne pas utiliser }; // Classe définissant un objet rectangle class CRectangle : public CElement { public: virtual void Draw(CDC* pDC) const; // Fonction affichant une ligne // Constructeur pour un objet rectangle CRectangle(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth); protected: CRectangle(){} // Constructeur par défaut - à ne pas utiliser }; // Classe définissant un objet cercle class CCircle : public CElement { public: virtual void Draw(CDC* pDC) const; // Fonction affichant une ligne // Constructeur pour un objet cercle CCircle(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth); protected: CCircle(){} // Constructeur par défaut - à ne pas utiliser }; // Classe définissant un objet courbe class CCurve : public CElement { public: virtual void Draw(CDC* pDC) const; // Fonction affichant une ligne // Constructeur pour un objet courbe CCurve(const CPoint& FirstPoint, const CPoint& SecondPoint, const COLORREF& Color); void AddSegment(const CPoint& Point); // Ajoute un segment à la courbe protected: // Inserer les membres données CCurve ici CList<CPoint, const CPoint&> m_PointList; // Liste de points Type safe CCurve(){} // Constructeur par défaut - à ne pas utiliser }; #endif // !Defined(Elements_h)

elements.cpp

// Mise en oeuvre des classes d'éléments
#include "stdafx.h"

#include <math.h>
#include "OurConstantes.h"
#include "Elements.h"

// Construteur de la classe CLine
CLine::CLine(const CPoint& Start, const CPoint& End, const COLORREF& Color,const int& PenWidth)
{
m_StartPoint = Start; // Définit la première extrémité de la ligne
m_EndPoint = End; // Définit la seconde extrémité de la ligne
m_Color = Color; // Définit la couleur de la ligne
m_Pen = 1; // Définit l'épaisseur de la plume

// Définit le rectangle délimiteur
m_EnclosingRect = CRect(Start, End);
m_EnclosingRect.NormalizeRect();
}

// Dessine un objet CLine
void CLine::Draw(CDC* pDC) const
{
/* Crée une plume associée à cet objet et
l'initialise avec la couleur de l'objet et l'épaisseur du trait*/
CPen aPen;
if(!aPen.CreatePen(PS_SOLID, m_Pen, m_Color))
{
// Echec de la création de la plume. Abondon du programme
AfxMessageBox("Echec du tracé d'une ligne", MB_OK);
AfxAbort();
}

CPen* pOldPen = pDC->SelectObject(&aPen); // Sélectionne la plume

// Maintenant, dessine la ligne
pDC->MoveTo(m_StartPoint);
pDC->LineTo(m_EndPoint);

pDC->SelectObject(pOldPen); // Restitue l'ancienne plume
}

// Obtient le rectangle englobant d'un élément
CRect CElement::GetBoundRect() const
{
CRect BoundingRect; // Objet qui stocke le rectangle englobant
BoundingRect = m_EnclosingRect; // Y place le rectangle délimiteur

// Augmente le rectangle de l'épaisseur de la plumeint Offset m_Pen 0 ? 1 : m_Pen; // L'épaisseur doit être au moins de 1
BoundingRect.InflateRect(Offset, Offset);

return BoundingRect; // Renvoie le rectangle englobant
}

// Constructeur de la classe CRectangle
CRectangle::CRectangle(const CPoint& Start, const CPoint& End, const COLORREF& Color,const int& PenWidth)
{
m_Color = Color; // Définit la couleur du rectangle
m_Pen = PenWidth; // Définit lépaisseur de la plume

// Définit le rectangle délimiteur
m_EnclosingRect = CRect(Start, End);
m_EnclosingRect.NormalizeRect();
}

// Dessine un objet CRectangle
void CRectangle::Draw(CDC* pDC) const
{
// Crée une plume associé à cet objet et l'initialise avec la couleur de l'objet et l'épaisseur du trait
CPen aPen;
if(!aPen.CreatePen(PS_SOLID, m_Pen, m_Color))
{
// Echec de la création de la plume. Abondon du programme
AfxMessageBox("Echec du tracé d'un rectangle", MB_OK);
AfxAbort();
}

CPen* pOldPen = pDC->SelectObject(&aPen); // Sélectionne la plume

CBrush* pOldBrush = static_cast<CBrush*>(pDC->SelectStockObject(NULL_BRUSH)); // Sélectionne un pinceazu vide

// Maintenant, dessine le rectangle
pDC->Rectangle(m_EnclosingRect);

pDC->SelectObject(pOldBrush); // Restitue l'ancien pinceau
pDC->SelectObject(pOldPen); // Restitue l'ancienne plume

}

// Constructeur de la classe CCircle
CCircle::CCircle(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth)
{
/* Calcule d'abord le rayon
Nous utilisons la virgule flottante car elle est requise par
la fonction bibliothèque (dans math.h) calculant une racine carrée*/
long Radius =
static_cast<long>(sqrt(static_cast<double>((End.x-Start.x)*(End.x-Start.x)+
(End.y-Start.y)*(End.y-Start.y))));

// Calcule maintenant le rectangle délimiteur du cercle en mode tracé MM_TEXT
m_EnclosingRect = CRect(Start.x - Radius, Start.y - Radius,
Start.x + Radius, Start.y + Radius);

m_Color = Color; // Définit la couleur du cercle
m_Pen = PenWidth; // Définit l'épaisseur de la plume
}

// Dessine un objet CCircle
void CCircle::Draw(CDC* pDC) const
{
// Crée une plume associé à cet objet et l'initialise avec la couleur de l'objet et l'épaisseur du trait
CPen aPen;
if(!aPen.CreatePen(PS_SOLID, m_Pen, m_Color))
{
// Echec de la création de la plume. Abondon du programme
AfxMessageBox("Echec du tracé d'un rectangle", MB_OK);
AfxAbort();
}

CPen* pOldPen = pDC->SelectObject(&aPen); // Sélectionne la plume

CBrush* pOldBrush = static_cast<CBrush*>(pDC->SelectStockObject(NULL_BRUSH)); // Sélectionne un pinceazu vide

// Maintenant, dessine le cercle
pDC->Ellipse(m_EnclosingRect);

pDC->SelectObject(pOldBrush); // Restitue l'ancien pinceau
pDC->SelectObject(pOldPen); // Restitue l'ancienne plume
}

// Constructeur de la classe CCurve
CCurve::CCurve(const CPoint& FirstPoint, const CPoint& SecondPoint, const COLORREF& Color)
{
m_PointList.AddTail(FirstPoint); // Ajoute le 1er point dans la liste
m_PointList.AddTail(SecondPoint); // Ajoute le 2nd point dans la liste
m_Color = Color;
m_Pen = 1;

// Construit le rectangle délimiteur en mode MM_TEXT
m_EnclosingRect = CRect(FirstPoint, SecondPoint);
m_EnclosingRect.NormalizeRect();
}

void CCurve::AddSegment(const CPoint& Point)
{
m_PointList.AddTail(Point); // Ajoute le point à la fin

// Modifie le rectangle délimiteur du nouveau point
m_EnclosingRect = CRect(min(Point.x, m_EnclosingRect.left),
min(Point.y, m_EnclosingRect.top),
max(Point.x, m_EnclosingRect.right),
max(Point.y, m_EnclosingRect.bottom));
}

// Dessine un objet CCurve
void CCurve::Draw(CDC* pDC) const
{
// Crée une plume associée à cet objet et
// l'initialise avec la couleur de l'objet et l'épaisseur du trait d'1 pixel
CPen aPen;
if (!aPen.CreatePen(PS_SOLID, m_Pen, m_Color))
{
// Echec de création de la plume. Fermeture du programme.
AfxMessageBox("Echec de la création de la plume au cours du tracé d'une courbe", MB_OK);
AfxAbort();
}
CPen* pOldPen = pDC->SelectObject(&aPen); // Sélectionne la plume

// Tarce la courbe maintenant
// Obtient la position dans la liste du premier élément
POSITION aPosition = m_PointList.GetHeadPosition();

// Si elle est correcte, se déplace vers ce point
if(aPosition)
pDC->MoveTo(m_PointList.GetNext(aPosition));

// Trace un segment pour chacun des points suivants
while(aPosition)
pDC->LineTo(m_PointList.GetNext(aPosition));

pDC->SelectObject(pOldPen); // Restitue l'ancienne plume
}

j'ai l'impression qu'il ne reconnait pas CList comme conteneur et je ne sais pas pourquoi. Car les erreurs sont liées a CList

merci de la reponse

5 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
23 juin 2004 à 00:20
as tu mis #include dans le fichier "SdtAfx.h" ?
0
andarius40 Messages postés 12 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 novembre 2005
23 juin 2004 à 00:40
oui j'ai bien mis dans "StdAfx.h"

j'ai essayer avec car c'est ce qui est ecris dans le livre.

mais cela ne change rien au erreur

Est ce que le c++ peut ne pas connaitre les conteneurs, comme si il netait pas gerer un meme installer
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
23 juin 2004 à 20:45
pourrais-tu remettre le contenu de fichier element.h avec les retours à la ligne (parce que là c'est pas jouable...)
0
andarius40 Messages postés 12 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 novembre 2005
23 juin 2004 à 21:11
ok le voici

#if !defined(Elements_h)
#define Elements_h

// Classe d'éléments générique
class CElement : public CObject
{
protected:
COLORREF m_Color; // Couleur d'un élément
CRect m_EnclosingRect; // Rectangle englobant un élément
int m_Pen; // Epaisseur de la plume

public:
virtual ~CElement(){} // Destructeur virtuel

// Opération de dessin virtuelle
virtual void Draw(CDC* pDC) const {} // Opération de // dessin virtuelle
CRect GetBoundRect() const; // Obtient le rectangle //englobant d'un élément

protected:
CElement(){} //Constructeur par défaut
};

// Classe définissant un objet ligne
class CLine : public CElement
{
public:
virtual void Draw(CDC* pDC) const; // Fonction // affichant une ligne

// Constructeur pour un objet ligne
CLine(const CPoint& Start, const CPoint& End,
const COLORREF& Color, const int& PenWidth);

protected:
CPoint m_StartPoint; // Première extrémité de la ligne
CPoint m_EndPoint; // Seconde extrémité de la ligne

CLine(){} // Constructeur par défaut - à ne pas utiliser
};

// Classe définissant un objet rectangle
class CRectangle : public CElement
{
public:
virtual void Draw(CDC* pDC) const; // Fonction //affichant une ligne

// Constructeur pour un objet rectangle
CRectangle(const CPoint& Start, const CPoint& End, const COLORREF& Color,
const int& PenWidth);

protected:
CRectangle(){} // Constructeur par défaut - à ne pas //utiliser

};

// Classe définissant un objet cercle
class CCircle : public CElement
{
public:
virtual void Draw(CDC* pDC) const; // Fonction affichant une // ligne

// Constructeur pour un objet cercle
CCircle(const CPoint& Start, const CPoint& End, const COLORREF& Color,
const int& PenWidth);

protected:
CCircle(){} // Constructeur par défaut - à ne pas utiliser
};

// Classe définissant un objet courbe
class CCurve : public CElement
{
public:
virtual void Draw(CDC* pDC) const; // Fonction affichant // une ligne

// Constructeur pour un objet courbe
CCurve(const CPoint& FirstPoint, const CPoint& SecondPoint, const COLORREF& Color);

void AddSegment(const CPoint& Point); // Ajoute un //segment à la courbe

protected:
// Inserer les membres données CCurve ici
CList<CPoint, const CPoint&> m_PointList;
// Liste de points Type safe

CCurve(){} // Constructeur par défaut - à ne pas utiliser
};

#endif // !Defined(Elements_h)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
andarius40 Messages postés 12 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 novembre 2005
23 juin 2004 à 21:15
desole le voici

#if !defined(Elements_h)
#define Elements_h

// Classe d'éléments générique
class CElement : public CObject
{
protected:
COLORREF m_Color;
// Couleur d'un élément
CRect m_EnclosingRect;
// Rectangle englobant un élément
int m_Pen; // Epaisseur de la plume

public:
virtual ~CElement(){} // Destructeur virtuel

// Opération de dessin virtuelle
virtual void Draw(CDC* pDC) const {}
// Opération de dessin virtuelle
CRect GetBoundRect() const;
// Obtient le rectangle englobant d'un élément

protected:
CElement(){} //Constructeur par défaut
};

// Classe définissant un objet ligne
class CLine : public CElement
{
public:
virtual void Draw(CDC* pDC) const;
// Fonction affichant une ligne

// Constructeur pour un objet ligne
CLine(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth);

protected:
CPoint m_StartPoint;
// Première extrémité de la ligne
CPoint m_EndPoint;
// Seconde extrémité de la ligne

CLine(){}
// Constructeur par défaut - à ne pas utiliser
};

// Classe définissant un objet rectangle
class CRectangle : public CElement
{
public:
virtual void Draw(CDC* pDC) const;
// Fonction affichant une ligne

// Constructeur pour un objet rectangle
CRectangle(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth);

protected:
CRectangle(){} // Constructeur par défaut

};

// Classe définissant un objet cercle
class CCircle : public CElement
{
public:
virtual void Draw(CDC* pDC) const;
// Fonction affichant une ligne

// Constructeur pour un objet cercle
CCircle(const CPoint& Start, const CPoint& End, const COLORREF& Color, const int& PenWidth);

protected:
CCircle(){} // Constructeur par défaut
};

// Classe définissant un objet courbe
class CCurve : public CElement
{
public:
virtual void Draw(CDC* pDC) const;
// Fonction affichant une ligne

// Constructeur pour un objet courbe
CCurve(const CPoint& FirstPoint, const CPoint& SecondPoint, const COLORREF& Color);

void AddSegment(const CPoint& Point);
// Ajoute un segment à la courbe

protected:
// Inserer les membres données CCurve ici
CList<CPoint, const CPoint&> m_PointList;
// Liste de points Type safe

CCurve(){} // Constructeur par défaut
};

#endif // !Defined(Elements_h)
0
Rejoignez-nous