Microsoft MVP성태의 닷넷 이야기
글쓴 사람
홈페이지
첨부 파일
 

C++ 함수를 const로 바꾼 경우 C2440 컴파일 오류가 발생한다면?

예를 들어 다음의 소스 코드에서,

#include "stdafx.h"
#include <map>

using namespace std;

class My
{
public:
    auto test() -> int;

private:
    map<int, int> _map;
};

auto My::test() -> int
{
    map<int, int>::iterator it = _map.find(5);
    return 5;
}

int main()
{
    return 0;
}

test 함수를 const 메서드로 바꾸면,

class My
{
public:
    auto test() const -> int;

private:
    map<int, int> _map;
};

auto My::test() const -> int
{
    map<int, int>::iterator it = _map.find(5);
    return 5;
}

다음과 같은 오류가 발생합니다.

Error C2440 'initializing': cannot convert from 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' to 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'

오류 코드의 복잡함에 당황하지 마시고 자세히 보면 답이 나옵니다.

cannot convert from 
    'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' 
to 
    'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'

똑똑한 stl은 const 문맥 내에서 수행될 const 함수를 미리 마련해 두었고, 따라서 위의 오류 메시지대로 다음과 같이 소스 코드를 바꿔주면 됩니다.

auto My::test() const -> int
{
    map<int, int>::const_iterator it = _map.find(5);

    return 5;
}




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 7/25/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




1  2  3  4  5  6  7  8  9  10  11  12  13  14  [15]  ...
NoWriterDateCnt.TitleFile(s)
11719정성태10/4/20181852.NET Framework: 796. C# - 인증서를 윈도우에 설치하는 방법
11718정성태10/4/20181095개발 환경 구성: 404. (opkg가 설치된) Synology NAS(DS216+II)에 cmake 설치
11717정성태10/3/20181324사물인터넷: 48. 넷두이노의 C# 네트워크 프로그램
11716정성태10/3/20181665사물인터넷: 47. Raspberry PI Zero (W)에 FTDI 장치 연결 후 C/C++로 DTR 제어파일 다운로드1
11715정성태10/3/20181716사물인터넷: 46. Raspberry PI Zero (W)에 docker 설치
11714정성태10/2/20181336사물인터넷: 45. Raspberry PI에 ping을 hostname으로 하는 방법
11713정성태10/2/20182712개발 환경 구성: 403. Synology NAS(DS216+II)에 docker 설치 후 .NET Core 2.1 응용 프로그램 실행하는 방법
11712정성태6/26/20193183.NET Framework: 795. C# - 폰트 목록을 한글이 아닌 영문으로 구하는 방법 [3]
11711정성태10/2/20182129오류 유형: 490. 윈도우 라이선스 키 입력 오류 0xc004f050, 0xc004e028
11710정성태10/5/20181789.NET Framework: 794. C# - 같은 모양, 다른 값의 한글 자음을 비교하는 호환 분해 [5]
11709정성태12/7/20181198개발 환경 구성: 402. .NET Core 콘솔 응용 프로그램을 docker로 실행/디버깅하는 방법
11708정성태12/7/20182192개발 환경 구성: 401. .NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성 [1]파일 다운로드1
11707정성태9/30/20181189오류 유형: 489. ASP.NET Core를 docker에서 실행 시 "Failed with a critical error." 오류 발생
11706정성태9/29/20181426개발 환경 구성: 400. Synology NAS(DS216+II)에서 실행한 gcc의 Segmentation fault
11705정성태9/29/20182387개발 환경 구성: 399. Synology NAS(DS216+II)에 gcc 컴파일러 설치
11704정성태9/29/20182767기타: 73. Synology NAS 신호음(beep) 끄기 [1]파일 다운로드1
11703정성태10/16/20181823개발 환경 구성: 398. Blazor 환경 구성 후 빌드 속도가 너무 느리다면? [1]
11702정성태9/26/20181148사물인터넷: 44. 넷두이노(Netduino)의 네트워크 설정 방법
11701정성태9/26/20181676개발 환경 구성: 397. 공유기를 일반 허브로 활용하는 방법파일 다운로드1
11700정성태9/21/20181435Graphics: 25. Unity - shader의 직교 투영(Orthographic projection) 행렬(UNITY_MATRIX_P)을 수작업으로 구성
11699정성태9/21/20181290오류 유형: 488. Add-AzureAccount 실행 시 "No subscriptions are associated with the logged in account in Azure Service Management (RDFE)." 오류
11698정성태9/21/20181431오류 유형: 487. 윈도우 성능 데이터를 원격 SQL에 저장하는 경우 "Call to SQLAllocConnect failed with %1." 오류 발생
11697정성태9/20/20181444Graphics: 24. Unity - unity_CameraWorldClipPlanes 내장 변수 의미
11696정성태9/19/20181460.NET Framework: 793. C# - REST API를 이용해 NuGet 저장소 제어파일 다운로드1
11695정성태9/21/20182363Graphics: 23. Unity - shader의 원근 투영(Perspective projection) 행렬(UNITY_MATRIX_P)을 수작업으로 구성
11694정성태9/17/20181149오류 유형: 486. nuget push 호출 시 405 Method Not Allowed 오류 발생
1  2  3  4  5  6  7  8  9  10  11  12  13  14  [15]  ...