[C++]problemes generes par une classe-errerus incomprehensibles

lolobardon Messages postés 6 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 8 décembre 2005 - 7 déc. 2005 à 07:12
lolobardon Messages postés 6 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 8 décembre 2005 - 8 déc. 2005 à 09:30
Bonjour,
je suis eleve ingenieur en electronique et j'effectue mon dernier semestre a Pekin en bossant sur un projet en C++ d'ou beaucoup de difficultes pour moi. Bref.
Je dois controller une camera a partir d'un pc en utilisant un protocole particulier. J'ai trouve une classe en c# qui correspond mais elle genere 3 types d'erreurs.

1. par exemple je declare plusieurs variables comme ci dessous

private :


const byte STX = 0xA0;

Voici les 2 erreurs generees:
error C2258: illegal pure syntax, must be '= 0'
d:\program files\microsoft visual studio\myprojects\tcp error C2252: 'STX' : pure specifier can only be specified for functions

2.
public :
//definition de types enum Pan {Left PanLeft,Right PanRight};

Erreur:

error C2065: 'PanLeft' : undeclared identifier

3.

Les fonctions de control de la camera renvoie un message de compose de 8 bits
Par exemple :
byte[] CameraZoom(uint deviceAddress,Zoom action);

Erreurs:

error C2238: unexpected token(s) preceding ';'
error C2059: syntax error : '['

Avec ces 3 types d'erreurs j'ai finalement des 100 d'erreurs car toujours les memes.
Si vous avez besoin de precisions pour me repondre ou si vous souhaitez jeter un coup d'oeil a mon code, n'hesitez pas a me demander.

Merci d'avance

Lolo

3 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 déc. 2005 à 13:04
"private : const byte STX = 0xA0;"



Pourquoi pas "const unsigned char STX = 0xA0; ?"

Mais bon, le pb vient du fait que tu ne peux pas donner de valeur par
défaut a des champs d'une classe. Pour donner des valeurs par défaut,
c'est le role du constructeur.



Pour caa:

//definition de types

enum Pan {Left PanLeft,Right PanRight};



Erreur:



error C2065: 'PanLeft' : undeclared identifier


L'erreur est explicite, c'est quoi "PanLeft" ? ca doit pas etre visible par ta classe.



Pour cette erreur: "byte[] CameraZoom(uint deviceAddress,Zoom action)"



essai: byte* CameraZoom(uint deviceAddress,Zoom action)

si byte est un type défini. Mais "byte" doit etre équivalent a "unsigned char". (cad un octet).
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 déc. 2005 à 13:10
J'ajoute une chose, pour ton problème de const byte STX = 0xA0.

En fait, tu peux donner une valeur par défaut a des champs du classe
seulement si ces champs sont déclarés "static". C'est à dire que tout
les objets de ta classe ont en commun ce champ. Donc si un objet le
modifie, il est modifié pour tous les autres. Mais comme tu le déclares
"const" il n'y a pas de problème.

Pour donner une valeur par défaut à un champ static, c'est comme ca:



Dans ton .h:

class A

{

...



static const byte STX = 0xA0; // soit directement, soit tu le définies dans ton .c si elle n'est pas private

}



Ou dans ton .c:

const byte A::STX = 0xA0;
0
lolobardon Messages postés 6 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 8 décembre 2005
8 déc. 2005 à 09:30
Salut,


merci beaucoup pour tes reponses. J'ai essaye ce que tu m'as dit mais j'ai toujours les memes problemes.
Si tu as le courage, j'ai mis ci dessous la classe d'ou vient le probleme.
Pour les variables const, je veux les laisser en private donc j'ai fait ce que tu as dit mais ca a pas change.
J'ai aussi tente des les mettre dans mon constructeur mais aucune difference.

Au niveau des erreurs avec enum, les variables qui sont declarees inconnues sont en fait declarees juste au dessus. Par exemple pour Pan Left,
Data2 Byte4, deuxieme ligne, c'est defini. Donc, d'ou vient le probleme?

Autre question, a la fin de mon .h, j'ai defini une structure. Est-ce autorise? Est-ce la bonne maniere? Doit-on plutot la mettre dans le constructeur?

J'ai aussi remplace le type byte par le type unsigned char comme tu me l'a conseille. Ensuite, au lieu que les fonctions renvoient unsigned char[], j'ai tente unsigned char* mais pas de difference.

Je sais c'est beaucoup de question, desole.


class P


{


private :

//////////Pan and Tilt Commands/////////////


static const unsigned char STX = 0xA0;
static const unsigned char ETX = 0xAF;


//Data1 Byte 3
static const unsigned char FocusFar = 0x01;
static const unsigned char FocusNear = 0x02;
static const unsigned char IrisOpen = 0x04;
static const unsigned char IrisClose = 0x08;
static const unsigned char CameraOnOff = 0x10;
static const unsigned char AutoscanOn = 0x20;
static const unsigned char CameraOn = 0x40;



//Data2 Byte 4
static const unsigned char PanRight = 0x02;
static const unsigned char PanLeft = 0x04;
static const unsigned char TiltUp = 0x08;
static const unsigned char TiltDown = 0x10;
static const unsigned char ZoomTele = 0x20;
static const unsigned char ZoomWide = 0x40;



//Data3 Byte 5
static const unsigned char PanSpeedMin = 0x00;
static const unsigned char PanSpeedMax = 0x40;

//Data4 Byte 6
static const unsigned char TiltSpeedMin = 0x00;
static const unsigned char TiltSpeedMax = 0x3F;


//////////Enums//////////////////////////////////
public :
//definition de types
enum PresetAction {Set,Clear,Goto};
enum PatternAction {Start1,Stop1,Run};
enum Action {Start,Stop};
enum LensSpeed {Low=0x00,Medium=0x01,High=0x02,Turbo=0x03}; enum Pan {Left PanLeft,Right PanRight}; enum Tilt {Up TiltUp,Down TiltDown}; enum Iris {Open IrisOpen,Close IrisClose}; enum Zoom {Wide ZoomWide,Tele ZoomTele};
enum Switch {On,Off}; enum Focus {Near FocusNear,Far FocusFar};


//////////Extended Command Set///////////////////
unsigned char[] Preset(unsigned int deviceAddress, unsigned char preset, PresetAction action);
unsigned char[] Flip(unsigned int deviceAddress);
unsigned char[] ZeroPanPosition(unsigned int deviceAddress);
unsigned char[] AutoScan(unsigned int deviceAddress, Action action);
unsigned char[] RemoteReset(unsigned int deviceAddress);
unsigned char[] Zone(unsigned int deviceAddress,byte zone, Action action);

unsigned char[] ClearScreen(unsigned int deviceAddress);

unsigned char[] ZoneScan(unsigned int deviceAddress,Action action);
unsigned char[] Pattern(unsigned int deviceAddress,PatternAction action);
unsigned char[] SetZoomLensSpeed(unsigned int deviceAddress, LensSpeed speed);
unsigned char[] SetFocusLensSpeed(unsigned int deviceAddress, LensSpeed speed);


////////Base Command Set///////////////////////////////////////////


unsigned char[] CameraSwitch(unsigned int deviceAddress,Switch action);
unsigned char[] CameraIrisSwitch(unsigned int deviceAddress,Iris action);
unsigned char[] CameraFocus(unsigned int deviceAddress,Focus action);
unsigned char[] CameraZoom(unsigned int deviceAddress,Zoom action);
unsigned char[] CameraTilt(unsigned int deviceAddress,Tilt action, unsigned int speed);
unsigned char[] CameraPan(unsigned int deviceAddress,Pan action, unsigned int speed);
unsigned char[] CameraPanTilt(unsigned int deviceAddress,Pan panAction, unsigned int panSpeed, Tilt tiltAction, unsigned int tiltSpeed);
unsigned char[] CameraStop(unsigned int deviceAddress);
////////////////////////////////////////////////////////////////////


//constructeur par defaut
P();


//destructeur par defaut
virtual ~P();

public : struct Message
{

static unsigned char Address;
static unsigned char CheckSum;
static unsigned char Data1,Data2,Data3,Data4;
static unsigned char[] GetMessage(unsigned int address, unsigned char data1, unsigned char data2, unsigned char data3, unsigned char data4)
{
if (address<0 & address>32)
throw new Exception("Protocol Pelco P support 32 devices only");


Address = unsigned char.Parse((address-1).ToString());//conversion d'un string en byte
Data1 = data1;
Data2 = data2;
Data3 = data3;
Data4 = data4;


CheckSum = (unsigned char)(STX ^ Address ^ Data1 ^ Data2 ^ Data3 ^ Data4 ^ ETX);


return new unsigned char[]{STX,Address,Data1,Data2,Data3,Data4,ETX,CheckSum};
}

}



};

Loic
0
Rejoignez-nous