혹시 클래스 쓰면 컴파일 안되나요?

  • rkd628
    rkd628

    클래스를 써서 채점프로그램에 올린것은 처음인데요

    컴파일 오류가 뜹니다. 그내용은

    submission.cpp: In function ‘int main()’:
    submission.cpp:137:3: error: reference to ‘find’ is ambiguous
    submission.cpp:8:7: error: candidates are: class find
    /usr/include/c++/4.6/bits/streambuf_iterator.h:359:5: error:                 template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> > >::__type std::find(std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, const _CharT2&)
    submission.cpp:137:8: error: expected ‘;’ before ‘ans’
    submission.cpp:141:3: error: ‘ans’ was not declared in this scope

    이렇습니다. 혹시 채점프로그램에 올릴때 클래스는 사용해선 안되는지요?


    10년 전
2개의 댓글이 있습니다.
  • Being
    Being

    우선 올려 주신 내용을 보기 좋게 정리했습니다. 다음부터 올려 주실 때에 참고하여 주시기를 부탁드립니다.

    에러 메세지를 살펴 보시면 첫 에러 메세지가 find 에 대한 참조가 불분명하다고 되어 있습니다. 이후로 그 참조를 가질 수 있는 후보가 두 가지 나왔는데, 하나는 직접 선언하신 class find고 나머지 하나는 std::find() 입니다. 즉, 코드에서 find라는 이름을 찾을 때에 이 두 가지 중 어떤 것인지 모른다는 뜻입니다.

    이 문제를 해결하기 위해서는 선언하신 클래스명을 변경하시거나, using namespace std; 구문을 제거하여 std::findfind로 접근 불가능하도록 하시거나 하는 몇 가지 선택지가 있겠습니다. 덧붙여 다른 컴파일러/환경에서는 잘 작동했을 수 있는데 이는 표준 라이브러리에서 헤더 사이의 참조 관계가 서로 다르기 때문입니다.


    10년 전 link
  • rkd628
    rkd628

    아하 감사합니다!
    클래스명을 바꾸니 해결이 되었네요!
    에러메시지 내용을 제대로 이해를 못했었습니다.
    자세한 설명 감사합니다!!^^


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.