2016-01-19 2 views
0

J'ai un projet MFC écrit en C++ et je veux afficher du texte dans un contrôle CEdit. Jusqu'à présent, j'ai essayé ceci:Comment afficher std :: string dans CEdit en C++

MFCApplication1Dlg.h

... 

private: 
    static CEdit m_progress; 
public: 
    static void setProgress(std::string message); 

... 

MFCApplication1Dlg.cpp

... 

void CMFCApplication1Dlg::setProgress(std::string message) 
{ 
    m_progress.SetWindowTextW((LPCTSTR)message.c_str()); 
} 

void logMessage(std::string message) 
{ 
    if(logFile.is_open()) 
    { 
     logFile << message; 
     logFile.flush(); 
     CMFCApplication1Dlg::setProgress(message); 

    } 
} 

... 

Quand je compile je cette erreur:

error LNK2001: unresolved external symbol "private: static class CEdit CMFCApplication1Dlg::m_progress" ([email protected]@@[email protected]@A) 

Quelqu'un peut-il dire moi ce qui est avec cette erreur et comment pourrais-je afficher les messages dans CEdit?

+0

Il y a des tonnes de doublons à cette question, et cela a à voir avec vous seulement * déclarant * le membre statique de façon variable, et non * définissant * n'importe où. C'est à dire. n'a rien à voir avec 'std :: string' et le réglage de la valeur des variables membres. Veuillez faire une recherche rapide pour la définition des variables membres * C++ statiques *. –

Répondre

1

Vous devez définir le membre statique dans votre fichier cpp:

CEdit CMFCApplication1Dlg::m_progress; 

Dans l'en-tête, il est juste déclaré, non défini.

En outre, je m'attendrais à SetWindowTextW pour prendre un wstring::c_str() paramètre, et non un string::c_str().

+0

C'était tout. Et vous nous avez raison, 'SetWindowTextW' doit prendre un paramètre' wstring :: c_str() '. Merci beaucoup. Aussi, j'ai besoin de définir mes messages les uns après les autres dans CEdit, mais avec le code que j'ai écrit, il écrase juste les messages, affichant seulement le dernier message. Des idées? – CristianLuca