2016-06-20 7 views
-3

Wenn ich eine std::vector<std::string> durch Verweis auf eine Funktion übergeben, die in den Vektor schreibt, ändert die aufgerufene Funktion den Vektor, aber die aufrufende Funktion sieht die Änderung nicht.C++ - Vektor durch Referenz nicht geändert

Zum Beispiel hat oData im folgenden Code eine Größe von 20, aber data hat Größe 0. Warum?

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

bool ReadFile(const std::string & iFile, std::vector<std::string> & oData) { 

    std::ifstream myfile(iFile); 

    if (!myfile.is_open()) { 
     std::cout << "Unable to open file"; 
     return false; 
    } 
    else { 
     std::string line; 
     while (getline(myfile, line)) { 
      std::cout << line << '\n'; 
      oData.push_back(line); 
     } 
     myfile.close(); 
    } 
    return true; 
} 

int main() { 
    std::vector<std::string> data; 
    ReadFile("numbers.txt", data); 

    return 0; 
} 

Hinweis: Die Verwendung von Visual Studio 2015 auf 10 Windows-

+2

Es sollte 'ReadFile (" numbers.txt ", Daten);' sein, sonst kann es nicht kompilieren. – songyuanyao

+0

Was Sie gepostet haben, konnte nicht der von Ihnen getestete Code sein. Hier ist der [Visual C++ Online-Compiler-Test] (http://rextester.com/QWO58204) – PaulMcKenzie

+0

Können wir die Frage dann entfernen? –

Antwort

0

Das Problem war mit der Lage des Haltepunkts in Visual Studio-Debugger.

Haltepunkt nach return -> Größe der Daten = 0; screenshot

Haltepunkt vor return -> Größe der Daten = tatsächliche Größe. screenshot