2016-06-21 33 views
1

私のコードに何が問題なのか分かりません。私は2つのファイルのコンソールからファイルパスを取得しようとしています。次に、それらのファイルでいくつかのfstreamオブジェクトを初期化し、一方はios::in | ios::out、もう一方はios::binaryを追加します。ここでC++:引数としてfstreamを渡そうとしたときに削除された関数?

は、私のコードの重要な部分です:

function "std::basic_fstream<_Elem, _Traits>::basic_fstream(const std::basic_fstream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 1244 of "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\fstream") cannot be referenced -- it is a deleted function 

私はヘッダファイルに周り掘っ:

// Function prototypes 
void INPUT_DATA(fstream); 
void INPUT_TARGETS(fstream); 

int main() 
{ 
    // Ask the user to specify file paths 
    string dataFilePath; 
    string targetsFilePath; 
    cout << "Please enter the file paths for the storage files:" << endl 
     << "Data File: "; 
    getline(cin, dataFilePath); // Uses getline() to allow file paths with spaces 
    cout << "Targets File: "; 
    getline(cin, targetsFilePath); 

    // Open the data file 
    fstream dataFile; 
    dataFile.open(dataFilePath, ios::in | ios::out | ios::binary); 

    // Open the targets file 
    fstream targetsFile; 
    targetsFile.open(targetsFilePath, ios::in | ios::out); 

    // Input division data into a binary file, passing the proper fstream object   
    INPUT_DATA(dataFile); 

    // Input search targets into a text file 
    INPUT_TARGETS(targetsFile); 

    ... 
} 

// Reads division names, quarters, and corresponding sales data, and writes them to a binary file 
void INPUT_DATA(fstream dataFile) 
{ 
    cout << "Enter division name: "; 
    ... 
    dataFile << divisionName << endl; 
    ... 
} 

// Reads division names and quarters to search for, and writes them to a file 
void INPUT_TARGETS(fstream targetsFile) 
{ 
    cout << "\nPlease input the search targets (or \"exit\"):"; 
    ... 
    targetsFile.write(...); 
    ... 
} 

ただし、Visual Studioは言って、INPUT_DATA(dataFile);INPUT_TARGETS(targetsFile);部分に私に叫びます私が1244行目を見つけるまで:

basic_fstream(const _Myt&) = delete; 

私は考えていませんこれは起こっている。私はまだC + +にはかなり新しく、おそらくちょうど何かばかげたことをやろうとしていますが、助けてもらえますか?

EDIT:明確化タイトル

答えて

3

あなたは、std::fstreamをコピーすることはできません。あなたの場合は、mainで作成したオリジナルのstd::fstreamを修正し、まったく新しいものを作成しないために、参照渡ししたいとします(コピーコンストラクタが削除された理由は、:)です)。

+2

これに加えて、 'std :: istream&'をとるように関数を変更することで、それ以外のファイルを扱うことができます。たとえば、文字列ストリームを渡すことでロジックをテストできます。 – chris

2

std::fstream年代のコピーコンストラクタが削除されているためです。あなたは価値によってそれを渡すことはできません。 は、この問題を解決するには、そのように、参照することによりstd::fstream年代を渡す:

void INPUT_DATA(fstream& dataFile) { /* ... */ } 
void INPUT_TARGETS(fstream& targetsFile) { /* ... */ } 

あなたがコードで何かを変更する必要はありません。コピーコンストラクタが削除されたように、あなたの周りに掘っ:)

std::fstreamをコピーする理由はありませんで判明として

関連する問題