inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

vector #4

vector 직접 구현 관련

해결된 질문

511

Won Myeong Kwon

작성한 질문수 2

1

안녕하세요! 정말 좋은 강의 잘 듣고 있습니다^^

1. 혼자서 구현을 해 보다가, reserve(.)에서 기존 capacity보다 신규 capacity가 작게 잘못 넣은 경우 size_까지 복사할 때 없는 배열에 접근하게 되는 문제가 되는 것 아닌가 생각이 듭니다. 그래서 다음과 같이 조기 종료 코드를 넣으면 어떤가요?

       if (new_capacity < capacity_)
        {
            cout << "please make it bigger, not smaller ";
            return;
        }

2. 그리고 Iterator 생성자를 pointer에 대한 reference로 두는 경우(다음 코드)에는 에러가 이렇게 나는데 ㅠㅠ 혹시 이유가 무엇일까요?

Iterator(const T*& ptr) : _ptr(ptr)
{}

//ERROR
1>C:\Developer\CppForGameDeveloping\CPP_Basics\VectorMyself\VectorMyself.cpp(129,1): error C2440: '<function-style-cast>': cannot convert from 'T *' to 'Iterator<T>'

미리 감사합니다!!

C++

답변 3

1

Rookiss

우연히 지나가다가 추가 질문을 봤는데,
글을 수정하시면 저한테 알림이 안 와서 알 수가 없습니다. ㅎㅎ
다음에는 댓글로 남기시거나 새로운 질문을 해주시기 바랍니다.

우선 참조값은 둘째치고 const T* 타입을 _ptr(ptr)을 통해 T* 타입으로 만들려고 하니,
여기서 첫번재 문제가 일어납니다.
굳이(?) 그렇게 받으시겠다면 캐스팅이 필요합니다.

문제는 거기서 끝나는게 아니라
const T*&를 인자로 받아야 하는데, const 참조는 왼값을 인자로 받으며

기본 코드에서 &_data[0]는 오른값이라 넣어줄 수 없습니다.


역시나 굳~이 꿋꿋하게 하려면 이렇게 한 단계를 거쳐서
왼값으로 만들어서 넣어줘야 합니다.

만약 위와 같은 문제가 해결되지 않으면,
Iterator(const T*& ptr)은 알맞는 후보가 아니라고 판단하기에
다른 생성자를 찾아보는데 나머지 애들도 맞는게 하나도 없으니

cannot convert from 'T *' to 'Iterator<T>'

자포자기 하고 에러가 뜨는 겁니다.

왼값 오른값에 관해서는 Modern C++쪽 후반부 내용을 참고하시기 바랍니다.

0

Won Myeong Kwon

답변을 읽고 곰곰 생각을 해 보니  const T* 타입을 T* 타입으로 만드는 게 원칙적으로 안 된다는 것을 제대로 몰랐던 것 같습니다. 

왼값 오른값도 엄청 좋은 복습이 되었습니다! 진심으로 감사드립니다. :)

실제 벡터는 예외코드가 아니라,  if (new_capacity > capacity_)인 경우에만 동작하게 되어 있네요!  

0

Rookiss

예외 코드는 넣는다고 절대 손해볼 것은 없으니,
당연히 바람직한 방법입니다.

실제 표준 vector에서도 예외처리를 하는지 살펴보면 좋을 것 같네요.

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

541

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

442

1

strcpy() 구현 관련 질문

0

513

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

453

1

클래스 타입의 포인터 질문합니다

0

546

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

498

1

템플릿 특수화 관련 질문

0

385

1

포인터 관련 질문합니다!

0

265

1

Unable to start assembler. Check your settings.

0

831

2

cpu선택

0

540

1

포인터 질문이 있습니다

0

324

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

585

1

iterator 삭제관련

0

406

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

310

1

15 분 45초 대 질문

0

309

0

스택 프레임 질문합니다!

2

306

1

오른값 참조 in 게임

0

384

0

동적할당 질문이 있습니다

0

450

1

안녕하세요 메모리에 대해 질문드립니다.

0

305

1

함수객체 의 매개변수

0

360

1

복사생성자

0

434

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

421

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

355

1

스택 오버플로우

2

790

1