문제

런타임에 프로그램에 전달 된 매개 변수에 따라 ifstream 또는 CIN에서 읽는 프로그램을 작성해야합니다.

나는 다음을 계획하고 있었다.

 istream in;

 if(argv[1] == "cin")
 {
      in = cin;
 }
 else
 {
      ifStream inFile;
      inFile.open(argv[1].c_str());
      in = inFile;
 }

그러나 보호 된 Istream은 Istream을 선언 할 수 없습니다. 그러한 일반적인 스트림을 선언 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

시도해보십시오 istream* 대신에. 그러나 코드를 약간 변경해야합니다. 포인터를 사용하면 가리키는 물체의 메모리 영역을 유지해야합니다. 다시 말해서, "infile"변수는 다른 사람이 존재하지 않기 때문에 선언 할 수 없습니다. 코드는 다음과 같습니다.

 istream* in;
 ifStream inFile;

 if(!strcmp(argv[1],"cin"))
 {
      in = &cin;
 }
 else
 {
      inFile.open(argv[1]);
      in = &inFile;
 }
 // use *in

(문자열 처리의 수정 사항도 참고합니다. 예로서 수정했습니다.)

다른 팁

대체 디자인은 코드를 사용하여 작성하는 것입니다 cin, 그런 다음 사용합니다 입력 리디렉션 파일에서 입력을 수락하려는 경우 프로그램을 실행할 때. 이것은 당신의 정확한 질문에 대답하지는 않지만, 당신이 제시 한 경우에 대한 더 간단한 디자인입니다.

예를 들어, 대신

program.exe cin

당신은 방금 달릴 것입니다

program.exe

그리고 대신

program.exe myfile.txt

당신은 달릴 것입니다

program.exe < myfile.txt

이것은 *nix와 Windows에서 작동합니다.

포인터 없이도이 작업을 수행 할 수 있습니다.

ifStream inFile;
istream in( argv[1] == "cin" ? cin : inFile.open(argv[1]));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top