2012-02-07 7 views
0

В визуальном файле проекта C++ cli я создал следующий класс (тип C++). не может объявить строку или тип символа, подходящий для переменной имени.Невозможно преобразовать из const char [] в 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. Тип литья эээ

+4

Это '#include ' не '#include '. –

ответ

6

Вам необходимо сделать следующие изменения:

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

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

EDIT:

Для решения комментарии по eliz, небольшой пример:

#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

, он мог бы использовать 'name = new string (« S.O.S »), но это было бы очень опасно, если не было конструктора копирования – Petesh

+0

@Petesh, я собирался предположить, что, но решил использовать' string' было проще. – hmjd

+0

@hmjd как я могу проверить вашу строку ответа foo() {name = "OK"; return name;} – eliz

2

Если name имеет тип string *, вы должны вызвать один из конструкторов строк.

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

И не забудьте выпустить свою строку в деструкторе (~ MyClass())!

+0

Оператор копирования и оператор присваивания также должны быть реализованы, поскольку версии по умолчанию будут недостаточными. – hmjd

+0

Да, большая четверка необходима для каждого класса с динамическими данными. – Alexander

+0

@hmjd (m.foo()) не работает. Это должно быть m-> foo() – eliz

Смежные вопросы