2016-04-01 8 views
0

Ich erhalte diese Fehlermeldung:Warum erhalte ich diesen Fehler bei der Zuweisung von Statistiken, wenn die beiden Variablen, die ich einander zuweise, beide vom Typ String sind?

error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)' 

Welche Ich gehe davon aus, bedeutet es nicht in der Lage ist mein einziger Titel String in meine newtitle Zeichenfolge zuzuweisen, weil sie nicht vom gleichen Typ sind. (Von denen eine char und die andere const char nehme ich an?)

strcpy(title, newtitle); 

Aber sie sind sowohl als Typ String definiert, so dass ich bin ein wenig verwirrt, was es ist, dass ich diesen Fehler gibt. Obwohl ich falsch liegen könnte, was genau dieser Fehler bedeutet.

#include<iostream> 
#include<iomanip> 
using namespace std; 
#include <cstring> 


class Movie{ 
private: 
string title; 
int year; 
string director; 

public: 
void setTitle(string); // function prototype 
void setYear(int); // function prototype 
void setDirector(string); // function prototype 

void displayMovie(); // function prototype 
}; 


void Movie::setTitle(string newtitle) 
{ 

strcpy(title, newtitle);  

} 


int main() 
{ 

Movie myMovie; 
string movietitle; 


cout << "Enter the title of the Movie: " << endl; 
cin >> movietitle; 

myMovie.setTitle(movietitle); 


} 
+0

Sie brauchen nicht 'strcpy' für' std :: string' Variablen. Sie brauchen das für die alten C-Style Strings, die eigentlich ein einfaches Array von 'Char's sind. 'std :: string' ist eine viel komplexere Klasse und unterstützt direkte Zuweisung, wie' title = newtitle; '. –

+0

Dieser Code wird den Fehler nicht reproduzieren. Erstellen Sie ein vollständiges Beispiel, das Ihren Fehler reproduziert. –

+0

@MarkTolonen: Die Frage bezieht sich auf einen schwerwiegenden Fehler bei der Kompilierung. Aber Sie haben Recht, es gibt einen weiteren Fehler in diesem Code, der verhindert, dass die gemeldete Fehlermeldung angezeigt wird. –

Antwort

6

std::strcpy erwartet sein erstes Argument char* zu sein, aber std::string nicht implizit zu char* umgewandelt werden könnte, deshalb Compiler beschwert.

Sie brauchen nicht strcpy für std::string zu verwenden, können Sie nur

title = newtitle; 
+0

Ich weiß, dass es möglich ist, es auf diese Weise zu tun, aber das sind Hausaufgaben, die ich zugeben werde, und es ist ziemlich einfach, abgesehen davon, dass sie möchte, dass wir diese Funktion nutzen, die das Einzige ist, woran ich bis jetzt hängen geblieben bin Dieser Fehler – Dante

+2

@Dante, Sie können 'strcpy' nicht verwenden, um eine' std :: string' in eine 'std :: string' zu kopieren. Soll man stattdessen 'char'-Arrays verwenden? –

+0

@Dante Dann könnten Sie rohe Char-Array mit 'strcpy' verwenden. IMO, das rohe Zeichenkettenfeld anstelle von 'std :: Zeichenkette' in C++ verwendet, macht nicht viel Sinn. – songyuanyao