Erreurs de compilation pour passage de valeurs par une struct

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 15 oct. 2006 à 06:33
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 19 oct. 2006 à 19:28
Bonjour,

Voila apres un moment je reviens cette fois avec plus d'explications sur un code pour passer des valeurs.
Donc, j'ai un programme de gestion de systeme de detection et de camera.


Voila ayant ajoute a mon programme d'autres options (une deuxieme
camera) j'ai du changer certaines choses notament le passage de donnees
par l'intermediaire d'une struct (car sinon je devais me lancer dans
des conversion de types au niveau des retours de types et ca devenait
complique si j'ai d'autres passages etc..)

Maintenant j'ai un code plus propre pour passer mes valeurs, j'ai utilisé un
struct pour renvoyer à la fois l'erreur (FSRteVal) et la camera
correspondant (bool).


Mais avec struct j'ai quelques erreurs de compilations;

-C2146

-C4430

-C4183

-C2556


Remarque j'ai ces memes erreurs repetees une quinzaine de fois?


Et ces erreurs pointent en partie sur le prototype de ma fonction isProblemeStereo() au niveau du header comme ce qui suit:

/////////////////////////////////////////
....

float GetQuality(
int iImage);
sNoprob isProblemeStereo();       // la que pointe les erreurs de compilation

bool isProblemeTraitement();

bool isProblemeAcquisition();
....

//////////////////////////////////

voici mon code pour ma struct:

///////////////////////////////////////
typedefstruct sNoprob
{

bool bster;
FSRetVal FStmpint;

int inut;
}sNoprob;

//////////////////////////////////////

Le retour de ma fonction IsProblem() a changé egalement:

////////////////////////////////////
sNoprob CMy99090Doc::isProblemeStereo()    {
  
    sNoprob inter;
 inter.FStmpint = FS_SUCCESS;           
 
 if(m_pThreadStereo1->m_initstereostatus==FS_SUCCESS && m_pThreadStereo2->m_initstereostatus==FS_SUCCESS)  
  return inter;            
    if (m_pThreadStereo1->m_initstereostatus!=FS_SUCCESS || m_pThreadStereo2->m_initstereostatus!=FS_SUCCESS)
       
  if (m_pThreadStereo1)
        { if (m_pThreadStereo1->isProbleme())
             inter.bster = 0;
             inter.FStmpint = m_pThreadStereo1->m_initstereostatus ;
        }
  else if (m_pThreadStereo2) 
       { if (m_pThreadStereo2->isProbleme())
             inter.bster = 1;
              inter.FStmpint = m_pThreadStereo2->m_initstereostatus ;
        }
       
    return inter;
}
////////////////////////////////

Voici  ma fonction OntImer() (pour l'affichage des erreurs d'initialisations a l'initialisation): 

/////
.........
  if(m_Init.Get_Params_General_ModeProcess ()==PROCESS_SAS_AUTOMATIQUE)
  {
     if(uiSecurity& LEVEL_1)
   {  
    //CStereo m_bvercam;               
    sNoprob initstereostatus=pDoc->isProblemeStereo();  
     if(initstereostatus.FStmpint)    
      m_ListeStereo.ResetContent ();  
     else
      m_bPblStereo=false;
    if (initstereostatus.bster)
                 {switch(initstereostatus.FStmpint) 
      {

                  case FS_ERROR_LOW_MEMORY:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
          m_ListeStereo.AddString (strDatalist);
        break;

      case FS_ERROR_CANNOT_OPEN_FILE:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
        break;
   
                  case FS_ERROR_BAD_CONFIG_FORMAT:  

                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
break;

      case FS_ERROR_BAD_PARAMETER_IN_CONFIG_FILE:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_BAD_PARAMETER:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_CREATE_PROCESS:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_COMMUNICATION_LOST:  
                         
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
               break;

                  case FS_ERROR_DISK_FULL:  
                                m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
           break;

                  case FS_ERROR_CANNOT_EXECUTE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_UNKNOWN:  
                        
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
           break;

                  case FS_ERROR_CAMERA_NOT_FOUND:  
                 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_NUMBER:  
            
          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;
           
      }
     }
      else
        {  
     switch(initstereostatus.FStmpint)

      {
                  case FS_ERROR_LOW_MEMORY: 

           m_bPblStereo=true;
        strDatalist.Format ("Explication Stereo 2 %s", FSRetVal_Names[initstereostatus.FStmpint]);
        m_ListeStereo.AddString (strDatalist);
        break;

      case FS_ERROR_CANNOT_OPEN_FILE: 
                
                          m_bPblStereo=true;
        strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
        m_ListeStereo.AddString (strDatalist);
        break;
   
                  case FS_ERROR_BAD_CONFIG_FORMAT: 
            m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

      case FS_ERROR_BAD_PARAMETER_IN_CONFIG_FILE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_BAD_PARAMETER: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_CREATE_PROCESS: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_COMMUNICATION_LOST: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_DISK_FULL: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_EXECUTE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_UNKNOWN: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CAMERA_NOT_FOUND: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_NUMBER: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;
           
      }
      }
     if(pDoc->isIniteStereo())
     m_bStereo=true;
        else
     m_bStereo=false;
   }
   else
   {
    m_bPblStereo=false;
    m_bStereo=true;
   }

   if(pDoc->isProblemeModbus())
    m_bPblModbus=true;
   else
    m_bPblModbus=false;

   if(pDoc->isInitModbus())
    m_bModbus=true;
   else
    m_bModbus=false;
  } 
  UpdateData(false);

.........
}
///////////////////////////////////////////

Je
pensais que l'erreur venait de %s dans l'instruction :
strDatalist.Format ("Explication Stereo 2  %s",
FSRetVal_Names[initstereostatus.FStmpint]);

mais  en remplaçant ca par ceci rien n'a changé   :  strDatalist.Format ( Explication Stereo 2  :  FS_ERROR_CAMERA_NOT_FOUND);

D'ou peut venir les erreurs ?

Dois-je faire un pointeur sur ma struct, et comment ?

Merci

7 réponses

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
15 oct. 2006 à 11:45
2.3.2 Déclaration ou retour d'un entier par défaut :

La déclaration de variable ou de retour de fonction retournant un int par défaut n'est plus reconnue
par Visual 2005.
Exemple:
const MAX=1000; //equivalent à 'const int MAX'
static n; // equivalent a 'static int n;'
func(char * p); // int func(char *p);
Pour la fonction func le compilateur retournera:
c:\samples\samplemdi\samplemdiview.h(13) : error C4430: missing type specifier - int
assumed. Note: C++ does not support default-int
c:\samples\samplemdi\samplemdiview.h(13) : warning C4183: 'func': missing return type;
assumed to be a member function returning 'int'
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
15 oct. 2006 à 13:34
Je suis rearrivé a avoir ce probleme, rien a voir avec mon post precedent
essaye de mettre
typedef struct
{
....
}sNoprob

typedef struct en deux mots
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
15 oct. 2006 à 20:37
bonsoir,

il ne s'agit pas un probleme de syntaxe car j'ai bien declarer ma struct  correctement:

///////////////////////////////////////
typedef struct sNoprob
{

bool bster;
FSRetVal FStmpint;

int inut;
}sNoprob;

//////////////////////////////////////

Donc comme vous dites peut etre que Visual Studio 2005 ne reconnait pas
la déclaration de variable ou de retour de fonction retournant un int par défaut.

Mais alors que faire pour qu'il le connaisse?

Merci
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
15 oct. 2006 à 22:04
Je viens de recompiler ce meme programe sous Visual C++ 6 et j'ai egalement des
messages d'erreurs au niveau de struct sNoprob.

Serai-ce du au fait qu'en compilant sous Visual C++ 2005, VC++ 6 ne sache pas compiler correctement ou bien simplement qu' il s'agit d'erreurs de programmation de ma part ? Dois-je peut etre utiliser un pointeur sur ma struct comme ci-dessous?

sNoprob *inter = new SNoprob;
inter->FStmpint = FS_SUCCESS;

Merci
0

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

Posez votre question
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
16 oct. 2006 à 07:02
J'ai aussi eu ce probleme mais je me souviens plus comment j'ai fait (sans passer par la desactivation de ce message) a tu été voir sur la msdn ?
http://msdn2.microsoft.com/en-us/library/ms173696.aspx
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
18 oct. 2006 à 22:07
Bonsoir,

J'ai trouvé la solution, et oui c'était simple mais il fallait le savoir :) .
Dans mon header j'ai placé ma  struct sNprob avant ma classe juste après les includes et là plus d'erreurs
c'est cool ça.

Merci
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
19 oct. 2006 à 19:28
Lol
Je comprend pourquoi je m en souvenais plus , j'ai du corriger par hazard sans m en rendre compte.
Bon a savoir ca !
0
Rejoignez-nous