2011-11-20 2 views
0

아래 메소드 이름은 open_file입니다.Ifstream을 할당하고 메서드에서 변수로 반환하는 방법은 무엇입니까?

ifstream& open_file(ifstream &in, const string &filename) 
{ 
    in.close(); 
    in.clear(); 

    in.open(filename.c_str()); 

    return in; 
} 

나는 main() 메소드에서 변수에 반환 값을 할당 할 :

int main() 
{ 
    ifstream val1; 
    ifstream val2 = open_file(val1, "test.cpp"); 

    return 0; 
} 

내가 코드를 컴파일 할 수 없습니다. 내 질문 :

  1. open_file 메서드의 반환 값을 main()의 변수에 할당 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?
  2. open_file 메서드의 반환 값을 변수에 할당 할 수없는 경우 반환 유형을 void로 변경하면 어떤 차이가 있습니까?
+0

실제로 무엇을하려는 것입니까? 참조로 val1을 전달했다가 반환하고 val2에 할당하려고합니다. 또한 오류 설명은 무엇입니까? –

+0

어쨌든 참조로 매개 변수를 전달한 이유는 무엇입니까? 이것이 쉽게 연결될 수있는 연산자라면, 나는 그것을 볼 수있었습니다. 그렇지 않으면 함수 내에서 in 매개 변수의 임의의 변이가 어쨌든 외부에서 관찰 될 수 있습니다. –

+0

나는 val2를 val2로 다시 돌려 보려고한다. C# 배경에서 C++ 복사 작업을 이해해야합니다. – Anonymous

답변

3
ifstream val2 = open_file(val1, "test.cpp"); 

이 (this 참조) 복사 생성자 private 이루으로 비활성화되어 스트림 객체의 복사본을 시도하기 때문에이 컴파일되지 않습니다.

는이 작업을 수행 :

ifstream & val2 = open_file(val1, "test.cpp"); 
//val1 and val2 is same here, as val2 is just a reference to val1 

그런데, 왜 당신도 그렇게 할 것인가? 당신은 단순히 쓸 수 있습니다 : 반환 값이 무시됩니다

open_file(val1, "test.cpp"); 
//use val1 here - no need to define val2 

때문에 당신은 반환 형식 void을 할 경우, 그것은 더 좋다. 그다지 혼란스럽지 않습니다.

+0

그것은 작동합니다. 고맙습니다. :) – Anonymous

+0

메소드 반환 유형을 void로 변경하면 차이가 있습니까? 상태 상태와 같이 잘못되었을 수 있습니다. – Anonymous

+0

@Anonymous : 아니요 사실, 방금 같은 대답을 제안하면서 제 대답을 편집했습니다. – Nawaz

관련 문제