2016-06-28 20 views
0

Ich versuche, einen Ofstream zu erstellen und dann Werte aus einem Array in es schreiben.ofstream-Variable in Name

void Graph::toFile(char* filename) 
{ 
    ofstream outfile(filename.c_str()+"_new.txt"); 
    for(int i = 0; i < noOfVertices; i++) 
     outfile << graphPartition[i] << endl; 
    outfile.close(); 
} 

Mein Hauptproblem ist, dass ich die Ausgabedatei filename+"new.txt" will namentlich genannt werden. Es ist jedoch etwas falsch mit meinem Ansatz, weil ich immer einen Fehler expression must have class type bekomme.

Es tut mir wirklich leid, wenn diese Frage ein Duplikat ist, habe ich keine befriedigende Lösung gefunden.

+2

Ersetzen Sie die 'char *' von 'const std :: string & ' –

+0

Und den Aufruf nach 'c_str()' verschieben, nachdem der Operator '+' zuerst aufgerufen wurde. –

+0

Ich bin sehr versucht, die Schließung wegen eines typografischen Fehlers zu kennzeichnen (versuche, eine Methode von 'char *' zu verwenden) ... @RemyLebeau Das 'c_str()' ist einfach nicht relevant, kein Verschieben erforderlich, es muss nur gelöscht werden. –

Antwort

4

Ihr Problem ist, dass filename nicht std::string ist es ein C-String (char*). C-Strings sind keine Objekte, sie haben keine Methoden, sie sind nur ein Zeiger auf ein nullterminiertes Array von Zeichen im Speicher.

filename.c_str() 
     -^- 

Das zweite Problem, das Sie mit diesem Ansatz haben würde, wenn Dateinamen ein std :: string war, ist, dass das Hinzufügen von zwei C-String-Zeiger nicht die Saiten nicht verketten, es tut einfach Mathematik auf den Zeiger, geben Sie eine Adresse gleich der Adresse von filename.c_str() sowie die Adresse des „_new.txt“

zurückgegeben Wenn Sie Ihren Code ändern Sie den Dateinamen als std :: string

void Graph::toFile(std::string filename) 

zu erhalten dann können Sie Folgendes tun:

filename += "_new.txt"; 

Wie folgt:

void Graph::toFile(std::string filename) 
{ 
    filename += "_new.txt"; 
    ofstream outfile(filename.c_str()); 

oder

void Graph::toFile(std::string filename) 
{ 
    ofstream outfile(filename + "_new.txt"); 

Demo:

#include <iostream> 
#include <string> 


void Graph_toFile(std::string filename) 
{ 
    filename += "_new.txt"; 
    std::cout << "opening " << filename << "\n"; 
} 

int main() { 
    Graph_toFile("hello_world"); 

    return 0; 
} 

http://ideone.com/eAnfZQ