Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
924 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu]Erreur de compilation

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]Erreur de compilation

n°1898028
thanks33
Posté le 23-06-2009 à 10:52:26  profilanswer
 

Bonjour, je me trouve confronté a une erreur de compilation bizarre.
 
Voici le code utilisé:
 

Code :
  1. #include <windows.h>
  2. #include <string>
  3. #include <iostream>
  4. void WatchDirectory(LPTSTR lpDir);
  5. int main()
  6. {
  7.    TCHAR Directory[MAX_PATH];
  8.    GetCurrentDirectory(MAX_PATH,Directory);
  9.    WatchDirectory(Directory);
  10.    return 0;
  11. }
  12. struct ScopedLockHandle
  13. {
  14.    ScopedLockHandle(HANDLE h_)
  15.       :m_handle(h_)
  16.    {}
  17.    ~ScopedLockHandle()
  18.    {CloseHandle(m_handle);}
  19. private:
  20.    HANDLE m_handle;
  21. };
  22. void WatchDirectory(LPTSTR lpDir)
  23. {
  24.   HANDLE hDir = CreateFile(
  25.     lpDir,
  26.     FILE_LIST_DIRECTORY,
  27.     FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
  28.     NULL,
  29.     OPEN_EXISTING,
  30.     FILE_FLAG_BACKUP_SEMANTICS,
  31.     NULL
  32.   );
  33.   if(hDir){
  34.      ScopedLockHandle scoped(hDir);
  35.      const unsigned nbr_item=1024;
  36.      FILE_NOTIFY_INFORMATION Buffer[nbr_item];
  37.      DWORD BytesReturned;
  38.      while( ReadDirectoryChangesW(
  39.         hDir,
  40.         &Buffer,
  41.         sizeof(Buffer),
  42.         TRUE, /* monitoring option */
  43.         FILE_NOTIFY_CHANGE_SECURITY|
  44.         FILE_NOTIFY_CHANGE_CREATION|
  45.         FILE_NOTIFY_CHANGE_LAST_ACCESS|
  46.         FILE_NOTIFY_CHANGE_LAST_WRITE|
  47.         FILE_NOTIFY_CHANGE_SIZE|
  48.         FILE_NOTIFY_CHANGE_ATTRIBUTES|
  49.         FILE_NOTIFY_CHANGE_DIR_NAME|
  50.         FILE_NOTIFY_CHANGE_FILE_NAME, /* filter conditions */
  51.         &BytesReturned, /* bytes returned */
  52.         NULL, /* overlapped buffer */
  53.         NULL))
  54.      {
  55.         FILE_NOTIFY_INFORMATION *p_cur = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(&Buffer[0]);
  56.         do{
  57.            switch(p_cur->Action)
  58.            {
  59.            case FILE_ACTION_ADDED:
  60.               std::wcout<<L"File added : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  61.               break;
  62.            case FILE_ACTION_REMOVED:
  63.               std::wcout<<L"File removed : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  64.               break;
  65.            case FILE_ACTION_MODIFIED :
  66.               std::wcout<<L"File modified : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  67.               break;
  68.            case FILE_ACTION_RENAMED_OLD_NAME :
  69.               std::wcout<<L"File renamed old name : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  70.               break;
  71.            case FILE_ACTION_RENAMED_NEW_NAME :
  72.               std::wcout<<L"File rename new name : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  73.               break;
  74.            default:
  75.               std::wcout<<L"File unknown : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  76.               break;
  77.            }
  78.            p_cur = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(reinterpret_cast<unsigned char*>(p_cur) + p_cur->NextEntryOffset);
  79.         }while(p_cur->NextEntryOffset>0);
  80.      }
  81.   }
  82. }


 
 
 
et l'erreur de compilation est la suivante:
 

Code :
  1. error: `wcout' is not a member of `std'|


 
Quand j'enléve les std::  
 
 
voici erreur :
 

Code :
  1. error: `wcout' was not declared in this scope


 
j'ai essayé beaucoup de chose rien a marché.
J'espère que vous pourrez m'aider.
 
Cordialement


Message édité par thanks33 le 24-06-2009 à 09:08:02
mood
Publicité
Posté le 23-06-2009 à 10:52:26  profilanswer
 

n°1898122
olivthill
Posté le 23-06-2009 à 12:08:03  profilanswer
 

Remplacer

#include <iostream>

par

#include <iostream>
using namespace std;
extern wostream wcout;

Message cité 1 fois
Message édité par olivthill le 23-06-2009 à 12:09:53
n°1898134
thanks33
Posté le 23-06-2009 à 13:12:16  profilanswer
 

merci de ton aide.
 
Malheureusement il y a toujours des erreurs.
 
 
les voici:
 

Code :
  1. `wostream' does not name a type


 

Code :
  1. `wcout' undeclared (first use this function)


 
 
 
Cordialement
 

n°1898141
Un Program​meur
Posté le 23-06-2009 à 13:24:01  profilanswer
 

C'est quoi le compilateur que tu utilises?  (Il me semble qu'un -- ou même les deux -- des ports de gcc pour Windows a -- avait? --  des problèmes dans la gestions des wchar_t avec beaucoup de choses non implémentées).
 
Sur le principe je ne vois pas de problèmes et ce que propose olivthill ne change rien.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1898148
Un Program​meur
Posté le 23-06-2009 à 13:28:03  profilanswer
 

olivthill a écrit :

Remplacer

#include <iostream>

par

#include <iostream>
using namespace std;
extern wostream wcout;



 
Je n'aime pas tellement les using namespace (surtout std qui n'est pas tellement conçu pour, j'ai eu trop de problèmes avec des collisions) et ça ne devrait rien changer à son problème.
 
Et naturellement, la déclaration d'un wcout dans le namespace global sans en fournir une définition va te fournir une erreur au link si tu arrives jusque là.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1898151
thanks33
Posté le 23-06-2009 à 13:33:39  profilanswer
 

Merci de ton aide Un programmeur.
 
j'utilise mingw32 comme compilateur et dev-c++ comme IDE.
 
J'ai aussi testé mon code sous code-block j'obtiens la même erreur.
 
 
Si cella vient du compilateur, quelqu'un aurai un autre solution pour récupérer les nom de fichier dans un répertoire?
 
 
Cordialement

n°1898307
olivthill
Posté le 23-06-2009 à 16:35:55  profilanswer
 

Mon idée de namespace n'était bonne et n'avait rien à voir en effet. Excusez-moi.
 
dev-cpp et code-block utilisent mingw. Or celui-ci ne supporte pas les wide characters.
C'est indiqué sur le site même de mingw : http://www.mingw.org/wiki/wide_characters
 
La solution consiste à utiliser des multibyte au lieu de wide char.
Pour cela, il faudrait utiliser WideCharToMultiByte()
 

n°1898362
thanks33
Posté le 23-06-2009 à 17:21:48  profilanswer
 

merci de m'aider ca va faire 2 jours que je galère dessus.
 
 
pourrais tu me donner un exemple s'il te plait?
 
 
Cordialement

n°1898378
olivthill
Posté le 23-06-2009 à 17:58:13  profilanswer
 

Avec plaisir. Voici :

TCHAR szFile[MAX_PATH];
int count = WideCharToMultiByte(CP_ACP, 0, p_cur->FileName,
                                p_cur->FileNameLength / sizeof(WCHAR),
                                szFile, MAX_PATH - 1, NULL, NULL);
szFile[count] = TEXT('\0');

n°1898393
thanks33
Posté le 23-06-2009 à 18:32:06  profilanswer
 

Donc si j'ai bien compris.
 
A la place de ca :
 

Code :
  1. case FILE_ACTION_ADDED:
  2.                std::wcout<<L"File added : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
  3.                break;


 
je met :
 
 

Code :
  1. case FILE_ACTION_ADDED:
  2.              int count = WideCharToMultiByte(CP_ACP, 0, p_cur->FileName,
  3.               p_cur->FileNameLength / sizeof(WCHAR),
  4.               szFile, MAX_PATH - 1, NULL, NULL);
  5.              break;


 
C'est bien sa?
 
Merci de m'aider
 
Cordialement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Resolu]Erreur de compilation

 

Sujets relatifs
[resolu]script pour sauvegarde incrémentale[Résolu]Récupérer les valeurs d'un formulaire dans $_POST
[RESOLU] - [XML] Librairie Java <-> Xml [Résolu][c++][apiWin32] gestion de la souris dans listview
[Resolu]Tronquer une chaine de caractèreErreur Excel nombre de polices [RESOLU]
[Resolu]API MYSQL erreur compilation[RESOLU][c][gcc] erreur de compilation
Erreur de compilation... [RESOLU][JAVA] erreur de compilation que je capte pas ... [resolu]
Plus de sujets relatifs à : [Resolu]Erreur de compilation


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR