2017-04-08 1 views
0

C++에서 텍스트 파일을 읽거나 ifstream/ofstream과 함께 코드를 작성하는 코드를 작성했습니다. 파일이 성공적으로 열렸는지 확인하기 위해 .is_open 구성원 기능이 fstream 인 것을 추가하고 싶습니다. 그것은 메인 루프 내에서 올바르게 작동합니다. 그 때 나는이 목적을 위해 루프 외부 함수를 작성하고 main 내부를 호출하려고, 나는 다음과 같은 오류 있어요 : 메인 루프의 외부 점검을 할C++에서 함수 내의 ifstream/ofstream.is_open()을 확인할 수 없음

std::ios_base::ios_base(const std::ios_base&) is private.

이 가능를? 방법? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

도와 주시면 감사하겠습니다. 아래 코드를 찾을 수 있습니다.

P. 저는 C++로 초보자입니다. 그래서 프로페셔널이 아닌 프로그래밍 방식을 보게되면 너무 과장하지 마십시오. 개선을위한 권장 사항은 환영 할만한 것이 아니지만.

#include <iostream> 
#include <fstream> 
using namespace std; 

void check_opened(ifstream toget, ofstream togive){ 
    if(toget.is_open()){ 
     cout<<"able to open file(toread.txt)"<<endl; 
    } 
    else { 
     cout<<"failure"<<endl; 
    } 
    if(togive.is_open()){ 
     cout<<"able to create/open a file(newone.txt)"<<endl; 
    } 
    else { 
     cout<<"failure"<<endl; 
    } 
} 
int main() { 
    ifstream toget; 
    ofstream togive; 
    toget.open("toread.txt"); 
    togive.open("newone.txt"); 
    check_opened(toget,togive); 
    toget.close(); 
    togive.close(); 
    return 0; 
} 
+0

is_open 호출을했는지 여부에 관계없이 오류가 발생합니다. [mcve]를 만드는 일은 귀하의 가정에 도전적입니다. – chris

+1

값으로'toget'와'togive'를'check_opened' 함수에 전달하고 있습니다. 그리고'ifstream'이나'ofstream'을 복사하는 것이 허용되지 않는 것 같습니다. 참조 또는 포인터로 전달하십시오. – gurka

+0

@gurka, 고마워, 내가 참고로 사용하고 그것이 효과. – UserRR

답변

3

스트림에 대한 참조를하지 않는 기능 check_opened, 그것은 하나의 사본이 걸린다. 따라서 check_opened를 호출하면 주 함수가 ifstreamofstream의 복사본 생성자를 암시 적으로 호출합니다.이 생성자는 오류를 일으키는 비공개입니다. check_opened의 서명을 void check_opened(ifstream&, ofstream&)으로 변경하면 문제가 해결됩니다.

+0

설명 해줘서 고마워요. – UserRR

관련 문제