인프런 커뮤니티 질문&답변

DWG담님의 프로필 이미지
DWG담

작성한 질문수

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

다중 포인터

이중 포인터 질문

작성

·

228

0

이중포인터 변수에게 개체멤버가 지닌 포인터 변수의 주소를 넘기려하는데 오류가 나서 질문드립니다.
포인터변수인 멤버변수가 private으로 닫아놓고 GetAddress.
예로들어
private Node* address - 멤버변수
public Node* GetAddress() { return address } -멤버함수
-  방식입니다.
이것을
Node* node = ~~
Node** dbAddress = &(node->GetAddress());
라는 코드를 작성하면

오류코드 : error C2102: '&'에 l-value가 있어야 합니다. 그리고 식은 lvalue 또는 함수지정자가 있어야합니다. 라고뜨는데 포인터변수의 주소를 넘기는건데 이게 왜 오류가나는지 궁금합니다

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

해당 부분은 강의 후반에 나오는 왼값/오른값(lvalue vs rvalue)를 알아야 해서,
일단은 넘어가시길 바랍니다.
짧게 요약하자면 오른값은 int a = 3; 와 같은 식에서
오른쪽에 오는 ( = 3) 애들을 말하는데
오른값에는 &3와 같은 문법을 허용하지 않습니다.

0

DWG담님의 프로필 이미지
DWG담
질문자

음 멤버 포인터 변수를 반환하는데도 rvalue인가요?

Node** dbAddress = &(node->GetAddress()); 가

Node** dbAddress = &(address);의 형태가 안된다는걸까요?

단순하게 멤버를 private이 아닌 public으로해 직접적으로 접근하면 오류가 나질 않아서 헷갈리네요..

Rookiss님의 프로필 이미지
Rookiss
지식공유자

node->GetAddress() = new Node(); 가 통과되지 않고
Node* node = node->GetAddress(); 는 통과되니,
GetAddress()의 반환은 오른값이라는 것을 알 수 있습니다.

DWG담님의 프로필 이미지
DWG담

작성한 질문수

질문하기