월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
typedef Iterator<T> iterator; 는 용량이 없는 건가요?
typedef Iterator<T> iterator; 이 방식을 써서 클래스에 다른 클래스를 포함시켜서 쓸 수 있는데 그냥 이름만 이렇게 변경해서 쓰겠다는 거니 stack 변수 처럼 용량이 있는 것도 아니고 클래스 변수 처럼 주소를 가진 것도 아닌거니 크기가 존재하지 않는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
맥북에서 VS로 C++은 안되는건가요??
맥 사용자인데 부트캠프로 윈도우로 변경 후 강의를 듣고있습니다! 원래대로 맥북을 이용해서 듣고싶은데 강의 자체도 윈도우고, 검색을 해보니 맥은 VS로 C++은 지원 하지 않는다고 봐서 VScode를 이용해야 한다던데, 엄연히 VS와 VScode는 다른걸로 알고있어서 그냥 윈도우 상태로 강의를 듣는게 낫겠죠?? 언리얼엔진까지 공부할려고 하는데 그냥 윈도우로 가는게 좋을지 조언 부탁드립니다!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
마지막 예제에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 마지막 예제의 29분 40초 경 bool isEven = ((count % 2) == 0); 이라는 라인을 입력하게 되는데, 이렇게 되면 루프가 돌 때마다 변수의 값을 변경하는게 아닌, isEven이라는 변수를 매번 선언하게 되는 것처럼 보입니다. 이 경우 별다른 문제는 없는 것인가요? 추가로 질문이 더 있는데, 이 부분을 디스어셈블리로 봤을 경우 마치 분기문처럼 어셈블리어가 이루어져 있더라구요. 이 부분은 ((count % 2) == 0)처럼 비교를 하는 부분이 있기 때문에 이해가 가는데, 중간에 dec와 or, inc가 나오는 라인은 왜 그런 것인지 이해가 되지 않습니다. 나머지를 구하는 연산의 경우 div 명령어를 사용하여 dx 레지스터에 저장된 나머지값을 가져오면 되는 것으로 이해하고 있습니다. 그렇게 하지 않는 것은 해당 컴파일러의 특성처럼 이해해도 될 것 같은데, 그것 외에 그냥 해당 instruction 자체가 이해가 가지 않아서, 이해를 돕고자 질문드립니다. 해당 어셈블리 부분 첨부합니다. bool isEven = ((count % 2) == 0); 006924D0mov eax,dword ptr [ebp-44h] 006924D3 and eax,80000001h 006924D8 jns std::_Narrow_char_traits<char,int>::length+0Fh (06924DFh) 006924DA dec eax 006924DB or eax,0FFFFFFFEh 006924DE inc eax 006924DF test eax,eax 006924E1 jne std::_Narrow_char_traits<char,int>::length+1Fh (06924EFh) 006924E3 mov dword ptr [ebp-118h],1 006924ED jmp std::_Narrow_char_traits<char,int>::length+29h (06924F9h) 006924EF mov dword ptr [ebp-118h],0 006924F9 mov cl,byte ptr [ebp-118h] 006924FF mov byte ptr [ebp-4Dh],cl
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
reference에 있는 값의 주소를보고 싶은데 자꾸 number 주소로 가집니다
포인터는 메모리를 까보면 &pointer 눌러서 확인하면 어떤 메모리주소에 특정 주소가 들어가 있는걸 보수 있잔아요 그런데 저기 reference는 &reference라고 메모리에서 검색하면 자꾸 &number 주소로 가집니다 이게 원래 정상인가요? 이해가 안되는게항목중 하나여서 분명 number 주소따로 있고 reference 주소도 따로 있어야 되는거 같은데 아무리 해도 나오질 않는데 제가 이해한게 맞는지 궁금합니다..... ㅠㅠ number 의 주소가 0x00001 이라고 가정하면 reference 주소도 0x00001 인것으로 일단 이해 하고 있습니다 아니면 reference 주소는 임의 메모리값 0x00003 인데 이게 가르키는 주소가 0x00001 인지 전자가 맞는지 후자가 맞는지 답변좀 부탁드려요 ㅠㅠ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이것도 데이터 누수라고 볼 수 있나요?
Pet() Pet(const Pet&) Pet() Pet(const Pet&) ~Pet() ~Pet() ~Pet() 깊은 복사 구현후 실행하면 생성자 4번, 소멸자 3번 출력되는데 Knight knight3; 때 생성된 Pet()이 knight3 = knight 때 복사 대입 연산자에서 생성된 pet으로 대체 되잖아요. 그래서 하나의 pet이 소멸이 안된 건가요? 이정도 데이터 누수는 괜찮은 건가요? 이것도 관리해 줘야 하나요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
타입변환연산자가 실행은 안되는데 빌드는 왜 되나요?
operator Knight() { return (Knight)(*this); } Knight knight2 = dog; 가 ctrl+alt+b 빌드는 통과하는데 f5로 실행을 하면 stackoverflow가 생기면서 안되는 이유가 클래스간의 구성 요소(변수)가 전혀 다르기 때문인 거잖아요? 근데 왜 빌드는 통과하는 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이런 식으로도 작동을 하는데 나중에 가서 문제가 생길까요?
코딩문제를 풀다가 이렇게 적었는데 작동은 하더라구요. 근데 강사님의 풀이를 들으면 너무나 달라서 이게 나중에 이렇게 적었을떄 문제가 되지 않을까 물어봅니다 int StrLen(const char* str) { int length = strlen(str); return length; } char* StrCpy(char* dest, char* src) { char* copied = strcpy(dest, src); return copied; } char* StrCat(char* dest, char* src) { char* SliceNStick = strcat(dest, src); return SliceNStick; }
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
스택과 메모리 질문입니다.
안녕하세요. 현재 강사님의 강의를 수강중인 학생입니다. 스택과 메모리강의를 방금 보았는데 이해가 안되는 부분이 있어 질문 남깁니다. 먼저 사진 1입니다. 사진 1은 강의대로 짠 코드를 f5를 눌러 디버그 했을때의 사진입니다. 현재 rsp는 0x60fe38이라고 나와있습니다. 질문1. 현재 0x60fe38에 들어있는 값은 의미가 있는 값인가요? 그 후 디버깅을 더 진행시켜봤습니다. 사진2 입니다. 사진 2는 MAX라는 함수를 실행시키기 전까지 (위에 push를 모두 실행하기까지) 디버깅을 진행한 사진입니다. 현재 0x60fe38이후 0x60fe30에 rax값이, 0x60fe28에 rbx, 0x60fe38에 5, 0x60fe38에 1이 잘 들어가 있는 것을 확인했습니다. 사진 3입니다. 문제의 사진 3입니다. 방금의 상황에서 f11키를 눌러 step into 해보았습니다. 그랬더니 rsp가 0x60fe18에서 0x60fe10으로 바뀌며 0x60fe10에 이상한 값이 들어있는것을 확인했습니다. 질문2 왜 rsp가 0x60fe18에서 0x60fe10으로 바뀐 건가요? (왜 stack이 한단계 더 쌓인건가요?) 질문3 사진 3에서 0x60fe10에 들어있는 값은 뭔가요? 질문4 사진으론 없지만 함수에서 빠져나가니 rsp가 0x60fe10에서 다시 0x60fe18로 바뀐것을 확인했습니다. 왜인가요..? 이해력이 부족하여 질문이 많습니다.. ㅠㅠ 죄송합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디스 어셈블리로 확인한 지역 변수의 관리 문의
안녕하세요. 항상 강의 잘 듣고 있습니다 :) 다름 아니라 데이터 갖고 놀기 섹션의 유의사항 항목에서 다음과 같은 궁금증이 들었습니다. 레지스터는 종류가 엄청 많지 않을텐데, 만약 지역 변수가 100개라면 어떻게 관리가 될까? 이것을 Push와 Pop으로 관리하고 있을까? 해서 디스어셈블리로 확인 해 보았는데.. hp 라는 표현을 통해 식을 처리하고 있는 것을 볼 수 있었습니다. 여기서 궁금한것은 따로 .data 영역이나 .bss 영역처럼 변수를 생성 해 준 것 같지 않은데, 어떻게 hp 를 특정 주소로 인식하여 계산을 처리하는 지 입니다. 또, 스택을 용도에 맞게 사용하고 나면 깨끗이 비워주어야 하는 것으로 이해하고 있는데 코드를 보았을 때에는 hp를 스택에서 제거하지 않는 것 처럼 보입니다... 이것은 어떻게 된 영문일까요.. ㅠㅠ 게임 개발에 대해 배우러 왔다가 어셈블리어를 공부하고 나니 궁금한 점이 막.. 생겨버리네요 ㅠㅠ 항상 감사합니다 :) - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
빌드 환경과 실행 환경이 다를 때 어떤 문제가 생기는 지 궁금합니다.
안녕하세요! 강의 정말 잘 듣고 있습니다 :) 어셈블리어 소스 코드를 빌드한 환경(아키텍쳐/운영체제)과 실행하는 환경이 다른 경우 어떤 문제가 발생할 수 있지...? 를 고민하다보니 다음과 같은 질문이 떠올랐습니다. 1. 리틀엔디안 환경에서 빌드 된 .exe 파일이 빅엔디안 환경에서 실행이 가능할까요?2. PRINT_HEX 와 같은 명령어는 운영체제에 종속적인 것으로 이해하였습니다. 윈도우즈 환경에서 빌드 된 .exe 파일을 다른 환경에서 실행하게 되는 경우 문제가 발생할까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
타입 변환 생성자에 대해서 궁금한 점이 있습니다.
안녕하세요 루키스님. 타입 변환 생성자에 대해 궁금한 점이 있어서 여쭤보러 왔습니다. 타입 변환 생성자로 인해 Knight(int hp) { ~~ } , Knight k , k = 3 이런식으로 컴파일러가 자동으로 형변환을 시켜주어서 불리지 말아야 할 타입 변환 생성자가 불리는 것으로 알고 있습니다. 그것을 막기 위해 explicit을 써주어서 컴파일러의 자동 형변환을 막는 것이고 위와 같이 대입 연산자를 통해 객체가 생성되는 것을 막는 것이라고 이해했는데요.. 그렇다면 앞으로 클래스를 만들 때 매개변수에 1개만 존재하는 타입 변환 생성자 같은 경우에는 무조건적으로 explicit 키워드를 붙이는 것이 좋은 것인가요?! 반대로 그냥 explicit 키워드를 사용하지 않고 타입 변환 생성자를 의도적으로 사용하는 사례가 있나요? 아무리 봐도 클래스 자료형에 다른 기본 자료형을 대입해서 무엇인가 행위한다는 것은 위험한 일인거 같고 왠만하면 지양하는게 맞다고 생각하는데 제가 생각하고 있는 내용이 확실한지 잘 모르겠습니다. 타입 변환 생성자를 의도적으로 사용하는 사례가 있는지와 타입 변환 생성자 같은 경우에는 왠만하면 explicit을 꼭 붙여주는게 좋은지에 대해 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
클래스 생성자를 헤더와 cpp에 나누어 선언하는 방법 관련 질문입니다.
안녕하세요. 좋은 강의 감사히 듣고 있습니다. 클래스 생성자를 헤더와 cpp에 나눌 때 관련하여 질문이 있습니다. <조건> 1. Player 클래스를 상속 받은 Knight 클래스가 있습니다. 2. Knight 클래스 생성자를 헤더와 cpp에 나누어 선언하려고 합니다. ----------------------- 방법 1 ---------------------- //헤더 파일 Knight() : Player(PT_Knight); //CPP파일 Knight::Knight() : Player(PT_Knight) { _hp = 100; } ---------------------------------------------------- ------------------------방법 2 --------------------- // 헤더 파일 Knight(); // CPP파일 Knight::Knight() : Player(PT_Knight) { _hp = 100; } ------------------------------------------------- 방법 1로 작성하니 빌드 과정에서 오류가 발생하고, 방법 2는 성공적으로 빌드가 되었습니다. 질문드릴 것은, '방법 2와 같이 작성을 해도 성공적으로 Player의 생성자를 호출해 오는가?' 입니다. 헤더 파일의 선언에서 Player의 생성자를 호출해온다고 선언을 하지 않았던게 마음에 걸리네요. 명료하게 질문을 드려야 하는데, ㅠㅠ 잘 전달이 되었는지 모르겠네요.. 으으. 그래도 답변을 부탁드려봅니다! 감사합니다.^^
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수의 정의는 전역, struct는 지역으로 인식된다 보면 되겠군요?
Test1.h에 있는 함수의 정의, struct StatInfo 둘다 Test1.cpp, CPP_Study.cpp 에서 인클루드 될 때 함수의 정의만 중복으로 인식 된다는 건 링크될 때 함수의 정의는 전역으로, struct StatInfo는 지역으로 인식 된다고 볼 수 있겠군요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
#pragma once가 함수 중복 정의만 못 막는 건가요?
함수 중복 정의만 못 막고 에러를 일으키는 거고 struct를 비롯한 다른 중복은 안심해도 되는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
const char* 질문입니다.
main함수내에서 const char* p = "Hello" p = "Bye"하면 바로 p내용이 바뀌는데 왜 함수에서는 안되는지 궁금해서 여러가지 실험을 해보니까 cont char* p = "Hello"에서 cout << p << endl; 을하면 "Hello"가나오고 cout << *p << endl; 을 하니까 'H'가나오더라구요? *p = p[0]이런 모양새라 SetMessage함수에서 *p = "Bye"하면 const 때문에 못바꾸고 p = "Hello"니까 p = "Bye"하면 이건 바뀌어야맞는거 아닌가? 싶어서요 main함수에서는 잘만 바뀌는데 SetMessage함수에서는 또 안되고 이게 왜이런거죠 도저히 이해가 안됩니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
배열과 주소 질문 있습니다.
xor ecx, ecx LABEL_PRINT_B: PRINT_HEX 2, [b+ecx] NEWLINE inc ecx cmp ecx, 5 jne LABEL_PRINT_B xor rax, rax ret section .data a db 0x01, 0x02, 0x03, 0x04, 0x05 ; 5 * 1 = 5바이트 b times 5 dw 1 ; 5 * 2 = 10바이트 강의에 나온 코드입니다. 여기서 b가 0x1, 0x0, 0x1, 0x0, 0x1.... 바이너리로 봤을때 이런식으로 저장이 돼있었잖아요. 근데 왜 출력할때 1, 0, 1, 0, 1이 아니라 1, 100, 1, 100, 1인지 잘 모르겠습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
pp[ 주소1 00000001 ] 인게 맞는 거 아닌가요?
메모리 창에 &pp 해서 나온 주소값이 가리킨 곳으로 가면 pp인 거잖아요 pp에 들어있는 값이 0000 0001 이면 주소2 [ ] 주소1(유효하지 않은 주소) [ ] pp [ 주소1 00000001 ] int** pp = (int**)arr2; 이렇게 주소2가 가리키는 곳 (**pp)까지 갈것도 없이 *pp단계에서 크러쉬 되는 거 아닌가요? pp 자체가 주소인데 왜 &를 붙여서 &pp를 메모리 창에 입력하는 건가요? &를 붙이면 pp의 주소가 되니 int***pp 로 되는거 아닌가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
CMD창 문제
경로 대로 했는데 지원되지 않는 16비트 응용 프로그램 이라고 에러뜹니다. 실행파일 속성 켜서 호환성 xp 서비스팩2로도 바꿔도 보고 관리자권한으로 켜서 디렉토리지점가서 켜봤는데도 안되네요..ㅠ ㅠ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
visual studio 설정
visual studio 사용하시는걸 보면 클래스나 변수 함수 다 기본 설정이 아닌데 따로 설정하시는 룰 같은게 있으신지 궁금합니다. 제가 따로 설정해보려해도 뭘 설정해야 원하는게 바뀌는지 찾기가 쉽지 않아서요 알려주실 수 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
끝 인덱스에 삽입 혹은 삭제 부분에 질문있습니다
영상에서 7분40~8분 내용에서벡터의 끝 부분에 삽입 삭제부분에서궁금한것이 있습니다1. 벡터에서 사이즈와 캐패시티를 전 시간에 배웠는데요만약 제가 vector<int> a;a.resize(100);a.reserve(100);으로size와 capacity크기를 정한후a배열에 포문으로 아무런 값을 넣은후에a벡터 push_back으로 끝 부분에 새값을 추가 한다면capacity는 100이란 한계떄문에 150으로 증가를 할텐데이때 기존에 있던 메모리공간에서새 메모리공간으로 이사비용이 들텐데요이런경우에선 배열끝에 추가를 해도capacity떄문에 비용이? 든다는게 맞을까요