컴파일을 했을 때 다음과 같은 에러가 나는 경우가 있다.


1>c:\program files\microsoft visual studio 10.0\vc\include\fstream(890): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : private 멤버('std::basic_ios<_Elem,_Traits>' 클래스에서 선언)에 액세스할 수 없습니다.

1>          with

1>          [

1>              _Elem=char,

1>              _Traits=std::char_traits<char>

1>          ]

1>          c:\program files\microsoft visual studio 10.0\vc\include\ios(176) : 'std::basic_ios<_Elem,_Traits>::basic_ios' 선언을 참조하십시오.

1>          with

1>          [

1>              _Elem=char,

1>              _Traits=std::char_traits<char>

1>          ]

1>          이 진단은 컴파일러 생성 함수 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)'에서 수행되었습니다.

1>          with

1>          [

1>              _Elem=char,

1>              _Traits=std::char_traits<char>

1>          ]

자세히 보면 ifstream에 관련된 에러라는 것을 알 수 있다. 어떤 상황에서 이런 에러가 발생하는 것일까?

문제가 발생한 부분의 코드는 다음과 같다.

total = ReadNextNumber( reader );

ReadNextNumber는 다음과 같이 선언되어있다.

static int ReadNextNumber( ifstream reader )
{
char c[2];
char str[5];

memset( c, 0x00, 2 );
memset( str, 0x00, 5 );

while( c[0] != ' ' )
{
reader.read( c, 1 );
STRCAT( str, c );
}

return atoi( str );
}


ifstream 또는 ofstream 과 같은 객체는 다른 함수로 값을 넘겨줄 때 값 자체를 넘겨줘서는 안된다. 반드시 Reference 즉 변수 이름 앞에 &를 붙여서 전달해줘야 한다.

ReadNextNumber의 파라미터 ifstream reader를 ifstream &reader로 바꿔주면 에러가 사라지는 것을 확인할 수 있다.


댓글을 달아 주세요

1 ··· 11 12 13 14 15 16 17 18 19 ··· 24 

글 보관함

카운터

Total : 32,852 / Today : 3 / Yesterday : 18
get rsstistory!