2012-02-07 5 views
0

Dans un fichier projet cli C++ visuel, j'ai créé la classe suivante (type C++). impossible de décliner un type de chaîne ou de caractère approprié pour la variable nom.Impossible de convertir de const char [] en std: string *

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

class MyClass 
{ 
public : 
int x; 
int y; 
string * name; 

void foo() { name = "S.O.S" ;} 
}; 

P.s. Type coulée err

+4

C'est '#include ' pas '#include '. –

Répondre

6

Vous devez apporter les modifications suivantes:

#include <string> // not <string.h> 

class MyClass 
{ 
public: 
    int x; 
    int y; 
    string name; // not string* 
}; 

EDIT:

Pour répondre aux commentaires par eliz, un petit exemple:

#include <iostream> 
#include <string> 

using namespace std; 

class MyClass 
{ 
public: 
    int x; 
    int y; 
    string name; 

    string foo() 
    { 
     name = "OK"; 
     return name; 
    } 
}; 

int main() 
{ 
    MyClass m; 

    // Will print "OK" to standard output. 
    std::cout << "m.foo()=" << m.foo() << "\n"; 

    // Will print "1" to standard output as strings match. 
    std::cout << ("OK" == m.foo()) << "\n"; 

    return 0; 
} 
+0

sinon il pourrait utiliser 'name = new string (" S.O.S "), mais ce serait très dangereux s'il n'y a pas de constructeur de copie – Petesh

+0

@Petesh, j'allais le suggérer, mais j'ai décidé d'utiliser' string' était plus simple. – hmjd

+0

@hmjd comment puis-je vérifier votre chaîne de réponses foo() {name = "OK"; return name;} – eliz

2

Si name est de type string *, vous devez alors appeler l'un des constructeurs de chaînes.

name = new string("S.O.S"); 

Et n'oubliez pas de libérer votre chaîne dans le destructeur (~ MyClass())!

+0

Le constructeur de copie et l'opérateur d'affectation auraient également besoin d'être implémentés car les versions par défaut seraient insuffisantes. – hmjd

+0

Oui, le grand quatre est nécessaire pour chaque classe avec des données dynamiques. – Alexander

+0

@hmjd (m.foo()) ne fonctionne pas. Ça devrait être m-> foo() – eliz

Questions connexes