push_back Funktion funktionniert nicht



  • Hallo,

    Ich habe ein Problem, ich habe mir eine Struktur gebaut die wie folgt aussieht:

    struct data{
       int type;
       int id;
       std::vector<std::string> scalar_name
    };
    
    data RtrnData;
    

    Ich habe auch die Include-Dateien <vector>, <iostream>, <string> eingefügt.
    Doch wenn ich nun in meinen Programm die Push_back Funktion benutze will, passiert gar nix, er schreibt nix in meinen Vector.

    RtrnData.scalar_value.push_back("test"); <- das wird nicht korrekt ausgeführt da in meinem Vector immer NULL steht aber nicht test
    

    Vielen Dank für ihre Hilfe

    Claude



  • Und du stellst wie fest, dass da NULL steht?

    Lars



  • Heißt der Vector jetzt scalar_name oder scalar_value?

    ClaudeG schrieb:

    er schreibt nix in meinen Vector.

    Das folgerst du woraus?

    ClaudeG schrieb:

    da in meinem Vector immer NULL steht

    Das stellst du wie fest?

    Zeig doch mal ein kompilierbares Minimalbeispiel, das den Fehler reproduziert. Vermutlich ist das Problem eher beim Ausgeben des Vectorinhalts als beim Einfügen.



  • struct data
    {
    	int type;
    	int id;
    	std::vector<std::string> scalar_name;
    };
    ...
    
    int main()
    {
    	data RtrnData;
    	RtrnData.scalar_name.push_back("test");
    
    	vector<string>::iterator it;
    	for ( it=RtrnData.scalar_name.begin() ; it < RtrnData.scalar_name.end(); ++it )
    		cout << " " << *it;
    
    	return 0;
    }
    

    liefert sicherlich 'test'. Was ist bei dir anders?



  • Im Vector kann nicht NULL stehen, denn NULL ist ein Zeiger. Im Vector speicherst du aber std::string und keine Zeiger.



  • Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s"); funktionieren müsste, doch dann bekomme ich als antwort <NULL>, darum habe ich angenommen dass im Vector sich nichts befindet denn in meinen Programm benutz ich die Funktion um die Länge des Vectors zu bekommen da bekomme ich immer null als Resultat so muss etwas nicht stimmen



  • ClaudeG schrieb:

    Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s");

    %s erwartet einen char-Zeiger. Zeig doch bitte mal den Code, da scheint so einiges schief zu laufen.



  • printf stammt noch aus C Zeiten.. Damals gab es keine std::string-s. Bei %s musst du einen C-String (char-Zeiger) übergeben, keinen std::string.

    Wegen genau solchen Sachen soltest du printf nicht nutzen - es ist nicht Typsicher. Du übergibst einen vollkommen falchen Typ und merkst es nicht einmal.

    std::cout << std::string("Hello World!") << std::endl;



  • ClaudeG schrieb:

    Also ich habe die push_back funktion genutzt, und dann wollte ich mit printf den Inhalt meines Vector anzeigen, dachte dass das Funktionniert da es sich um ein string handelt und somit printf("%s"); funktionieren müsste, doch dann bekomme ich als antwort <NULL>, darum habe ich angenommen dass im Vector sich nichts befindet denn in meinen Programm benutz ich die Funktion um die Länge des Vectors zu bekommen da bekomme ich immer null als Resultat so muss etwas nicht stimmen

    Zeig doch mal bitte ein richtiges Beispiel aus deinem Code.
    Vermutlich hast du printf einen falschen Parameter übergeben.
    Welche Funktion um die Länge des vectors zu bestimmen benutzt du denn? size() wäre die richtige.



  • Also hier ein Auschnitt aus meinen Programm:

    // fin ist ein std::ifstream
    fin.open(filename, std::ios::in);
    
    	char *ch_ptr;
    
            char scalar_names[256];
    	// names in one line
    	fin.getline(scalar_names, 255);
    
    	// first token
    #ifndef WIN32
        ch_ptr = strtok(scalar_names,"# ");
    #else
        char * next_token;
        ch_ptr = strtok_s(scalar_names,"# ", &next_token);
    #endif
    
    		// insert into vector
    		if ( ch_ptr != NULL )
    		  RtrnData.scalar_name.push_back(std::string(ch_ptr));
    
                       // den ch_ptr hat den richtigen Wert, den printf("%s", 
                          ch_ptr); zeigt mir ihn an.
    #endif
    	 // indicate scalar value to be displayed
    	 int i = 0;
    	 int found = 0;
    	 std::string scalar_display;
    	 unsigned long scalar_display_long;
    	 while ( i < RtrnData.scalar_name.size() )
    	 {
                     // Rechnung die noch gemacht werden müssen, sowie auch noch
                        weitere Parameter aus der Datei auslesen, doch in diesen 
                        Loop komme ich nie
             }
    

    Ich hoffe es ist jetzt klarer, denn ich kann keinen Syntax Fehler erkennen, denn die Datei bekomme ich ja auch gebaut! Aber die Ausführung klappt nicht wie ich will



  • Kannst du bitte den Haken bei "BBCode in diesem Beitrag deaktivieren" entfernen?

    ClaudeG schrieb:

    Also hier ein Auschnitt aus meinen Programm:

    // fin ist ein std::ifstream
    fin.open(filename, std::ios::in);
    
    	char *ch_ptr;
    
            char scalar_names[256];
    	// names in one line
    	fin.getline(scalar_names, 255);
    
    	// first token
    #ifndef WIN32
        ch_ptr = strtok(scalar_names,"# ");
    #else
        char * next_token;
        ch_ptr = strtok_s(scalar_names,"# ", &next_token);
    #endif
    
    		// insert into vector
    		if ( ch_ptr != NULL )
    		  RtrnData.scalar_name.push_back(std::string(ch_ptr));
    
                       // den ch_ptr hat den richtigen Wert, den printf("%s", 
                          ch_ptr); zeigt mir ihn an.
    #endif
    	 // indicate scalar value to be displayed
    	 int i = 0;
    	 int found = 0;
    	 std::string scalar_display;
    	 unsigned long scalar_display_long;
    	 while ( i < RtrnData.scalar_name.size() )
    	 {
                     // Rechnung die noch gemacht werden müssen, sowie auch noch
                        weitere Parameter aus der Datei auslesen, doch in diesen 
                        Loop komme ich nie
             }
    

    Ich hoffe es ist jetzt klarer, denn ich kann keinen Syntax Fehler erkennen, denn die Datei bekomme ich ja auch gebaut! Aber die Ausführung klappt nicht wie ich will

    und kannst du bitte compilier-baren quellcode posten?
    oder zumindest quellcode, wo man versteht, was du machen möchtest (als tip: zähl mal die #endifs im vergleich zu deinen #ifs / #ifdefs / #ifndefs)

    die einrückung sieht auch so aus, als ob du aus verschiedenen funktionen einfach nur blind rauskopiert hättest und dich jetzt wunderst...

    bb


Anmelden zum Antworten