2016-06-20 16 views
-3

std::vector<std::string>をベクトルに書き込む関数を参照して渡すと、呼び出された関数はベクトルを変更しますが、呼び出し元の関数は変更を認識しません。参照によって渡されたC++ベクトルが変更されない

たとえば、次のコードでは、oDataのサイズは20ですが、dataのサイズは0です。なぜですか?

#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; 
} 

注:Windows 10にVisual Studio 2015を使用して

+2

'ReadFile(" numbers.txt "、data);'でなければなりません。それ以外の場合はコンパイルできません。 – songyuanyao

+0

投稿した内容は、テストしたコードではありませんでした。ここで[Visual C++オンラインコンパイラテスト](http://rextester.com/QWO58204) – PaulMcKenzie

+0

質問を削除できますか? –

答えて

0

問題は、Visual Studioデバッガでブレークポイントの位置としました。

ブレークポイント後return - >データのサイズ= 0; screenshot

ブレークポイント前return - >データのサイズ=実際のサイズ。 screenshot

関連する問題