2010-11-25 18 views
1

J'essaye sans aucune chance d'inclure string s dans mon projet débutant C++ Win32 API. Le code ne compilera pas si je définis un string. Que se passe-t-il?C++ Win32 API include <string>


Détails:

Je travaillais dans Dev C++, mais ont maintenant passé à Code :: Blocks en utilisant le "Gnu compilateur GCC" (par défaut?).

Voici les cas de code que j'ai essayé, toutes semblables, avec leurs résultats:

Compile avec succès:

#include <windows.h> 
#include <string.h> //<string> throws "no such file or directory" 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
//...the rest works perfectly, omitted in following examples 

ne réussit pas:

#include <windows.h> 
#include <string.h> 

// Error: "string" does not name a type 
string myString; 

// ...WndProc 

Compile avec succès:

#include <windows.h> 
#include <string.h> 
using namespace std; 

// ...WndProc 

échoue:

#include <windows.h> 
#include <string.h> 
using namespace std; 

// Error: "string" does not name a type 
string myString; 

// ...WndProc 

ne réussit pas:

#include <windows.h> 
#include <string.h> 

// Error: expected constructor, destructor, or type conversion before "myString" 
// Error: expected ',' or ';' before "myString" 
std::string myString; 

// ...WndProc 

J'ai posé cette question il y a quelques jours, mais supprimé car il semblait être une question stupide. Cependant, il n'a pas été résolu et est maintenant revenu me hanter. Merci d'avance.

Répondre

2

Est-ce que le fichier source ont une extension .cpp? S'il s'agit de .c, il sera compilé en tant que code C, ce qui exclut probablement les répertoires contenant les en-têtes C++ standard.

+0

Pas avec gcc. GCC compilera tout fichier que vous lui lancerez dans la langue que vous lui aurez indiquée. Compiler un fichier .cpp avec 'gcc' par exemple compilera avec succès le programme, mais ne parviendra pas à le lier avec la bibliothèque C++ standard. Les commutateurs et/ou arg0 sont comment spécifier la langue, en utilisant 'g ++' au lieu de 'gcc' par exemple. –

+0

OUI c'est le problème. Changé l'extension et supprimé le '.h' et il fonctionne bien. Un grand merci à vous et @Noah. – Ben

+0

Guess gcc fait attention à l'extension. Juste regardé la page de man. Peut certainement être remplacé cependant. –

2

#include <string.h> //<string> throws "no such file or directory"

Quelque chose est cassé soit sérieusement l'installation du compilateur ou votre utilisation de celui-ci. Tout ce qui vient après cela, ne pas être en mesure d'inclure l'en-tête pour std::string va rendre très difficile à utiliser.

Vous pouvez installer la suite GCC sans le support C++, c'est peut-être votre problème.

+0

Merci Noah, testé à nouveau en supprimant le '.h' et pour une raison quelconque il a parfaitement fonctionné. Toujours pas de solution mais c'est bon pour l'instant. Acceptera quand la minuterie se termine (si aucune meilleure réponse). – Ben

+0

désolé @Marcelo cloué. Avoir un +1 avec mes remerciements. – Ben

0

<string.h> contient des macros de chaînes ANSI C et des déclarations de fonctions (voir here), pas le C++ string. Pour utiliser std::string, vous devez faire

#include <string> 

(pas .h)

#include <windows.h> 
#include <string> 

std::string myString; 
+0

L'OP le sait déjà, et a souligné que cela échoue. –

+0

Umm, non - voir son commentaire à la réponse @ Noah ci-dessus: "Merci Noah, testé à nouveau en supprimant le .h et pour une raison quelconque, il a parfaitement fonctionné." Ouais - la raison pour laquelle il a fonctionné parfaitement est parce que c'est la bonne chose à faire. – bgporter

+0

Comment cette réponse peut-elle être downvoted? C'est informatif et utile. Si l'auteur de la question suivait ces instructions, cela l'amènerait au problème suivant (c'est-à-dire qu'il avait une extension .c au lieu de .cpp). +1 de moi bgporter. –

0

string.h a seulement des méthodes pour gérer la chaîne. Par exemple, strcpy, strlen etc ... (http://opengroup.org/onlinepubs/007908799/xsh/string.h.html)

Si vous voulez utiliser std :: string, vous devez utiliser. S'il n'y a pas de fichier, vérifiez ce fichier.

Bonne chance :)