2016-06-21 9 views
1

내 코드에 어떤 문제가 있는지 알 수 없습니다. 두 파일에 대한 콘솔에서 파일 경로를 얻으려고하는 중입니다. 그런 다음 해당 파일과 ios::in | ios::out을 하나의 fstream 개체로 초기화하고 다른 하나는 ios::binary을 추가합니다. 말,C++ : fstream을 인수로 전달하려고 할 때 삭제 된 함수는 무엇입니까?

// 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(...); 
    ... 
} 

그러나, 비주얼 스튜디오는 INPUT_DATA(dataFile);INPUT_TARGETS(targetsFile); 부분에 나에게 고함 :

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 

내가 헤더 파일에 주위를 파고 여기에

내 코드의 중요한 부분입니다 내가 라인 1244 찾을 때까지

basic_fstream(const _Myt&) = delete; 

을 나는 아무 생각 ㅁ이 없다 이런 일이 일어나고 있습니다. 나는 여전히 C++을 처음 접했고 아마 뭔가 바보 같은 짓을했을 것이다. 그러나 누군가 도와 줄 수 있을까?

편집 : 설명했습니다 제목 std::fstream 년대의 복사 생성자가 삭제 되었기 때문에입니다

답변

3

당신은하는 std::fstream을 복사 할 수 없습니다. 귀하가 원할 경우 main에서 생성 한 원본 std::fstream을 수정하고 전혀 새로운 복사본을 만들지 않으므로 (참조 : 복사 생성자가 삭제 된 이유는 :)) 참조로 전달하려고합니다.

+2

이 외에도'std :: istream &'을 사용하는 함수를 변경하면 파일 외에도 작업 할 수 있습니다. 예를 들어, 문자열 스트림을 전달하여 논리를 테스트 할 수 있습니다. – chris

2

. 가치로 전달할 수는 없습니다. 는이 문제를 해결하려면과 같이, 참조로 std::fstream 년대를 전달합니다

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

당신은 코드에서 다른 작업을 변경할 필요가 없습니다. 복사 생성자가 삭제되도록 당신이 주변에 파고 :

또한 std::fstream을 복사 할 이유가 없다 의해 발견