'VisualStudio'에 해당되는 글 2건

  1. 2012.05.09 [개발팁] Visual Studio - error C2248
  2. 2011.08.23 [개발팁] Visual Studio 2008 유용한 단축키

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


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로 바꿔주면 에러가 사라지는 것을 확인할 수 있다.


댓글을 달아 주세요


F12
커서가 있는 위치의 함수, 변수의 정의로 이동

Ctrl + -  
F12나 찾기 등으로 커서가 움직인 경우 이전 커서 위치로 이동


vim 에서 ctags를 이용했을 때 Ctrl + ], Ctrl + T와 같은 기능이라고 보시면 됩니다. 

댓글을 달아 주세요

1 

글 보관함

카운터

Total : 29,413 / Today : 0 / Yesterday : 14
get rsstistory!