월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디스어셈블리 질문입니다.
13분 22초에 나오는 플레이어 스탯 관련 질문입니다.저 같은 경우는 ebp레지스터의 위치를 기준으로 값을 할당하는게 아닌아래의 내용처럼 eax레지스터의 주소에 +4, +8한 값을 이용하여 변수에 값이 할당되는데요제 컴퓨터는 왜 eax레지스터를 이용하였는지 궁금합니다. ret.hp = 100;00CC245E mov eax,dword ptr [ret] 00CC2461 mov dword ptr [eax],64h ret.attack = 10;00CC2467 mov eax,dword ptr [ret] 00CC246A mov dword ptr [eax+4],0Ah ret.defence = 2;00CC2471 mov eax,dword ptr [ret] 00CC2474 mov dword ptr [eax+8],2
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
할당된 메모리를 감싸는 'cccccccc' 질문 드립니다
멤버변수 int hp; 하나만 지정 하고a.hp=1;b.hp=2; 식으로 a,b 로 각각 대입했을때 메모리가 cccccccc0000002cccccccccccccccc0000001cccccccc 식으로 메모리가 올라오는데 감싸고 있는 'cccccccc' 의미가 있는 값인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
주소 전달 과 참조 전달 관련하여 질문있습니다
값 전달과 주소 전달 2개만 봤을 때 되도록 이면 주소 전달을 사용하라고 하셨는 대주소를 알면 그 데이터의 값을 접근 할 수 있으니까 굳이 값 전달 사용 하지 않고 주소 전달만 사용해도 되는 부분일까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
가상함수 소멸자와 가상함수 테이블 질문
class Item { public: //... 생략 virtual void function1() { cout << "Item Function1()" << endl; }; } class Weapon : public Item { public: //...생략 void function1() { cout << "Weapon Function1()" << endl; }; } class Armor : public Item { public: //...생략 void function1() { cout << "Armor Function1()" << endl; }; } int main() { // 1번 암시적 형변환 Weapon weapon; Item* iPtr = &weapon; iPtr->function1(); // 2번 암시적 형변환 Armor armor; Item* iPtr = &Armor; iPtr->function1(); // 3번 명시적 형변환 Item item; Weapon* wPtr = (Weapon*)&item; wPtr->function1(); }1번을 수행하면 Weapon을 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Weapon::function1()을 호출2번을 수행하면 Armor를 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Armor::function1() 을 호출3번을 수행하면 Item을 명시적으로 Weapon으로 형변환하고 해당하는 wPtr이 Item::function1() 을 호출클래스타입을 편의상 CType, 가상함수 테이블을 가리키는 포인터를 편의상 VPtr 이라고 지칭하겠습니다.가상함수 생성시 해당하는 CType의 VPtr생성. (가상함수에 관련된 실습 시간마다 메모리 확인 시 맨 처음 주소 부분에 생성된 주소 값?)이 포인터가 가리키는 가상함수 테이블에는 CType 의 가상함수에 대한 정보가 들어가 있음.즉 CType 의 주소에는 가상함수 테이블을 가리키는 VPtr 의 정보가 내장되어 있음 => 주소의 맨 처음 값에.암시적 명시적 형변환과는 관계없이 포인터에들어간 주소값에는 가상함수 테이블을 가리키는 VPtr이 존재.그러므로 형변환이 끝난 CType에서 가상함수를 호출하더라도 VPtr 정보는 남아 있고 CType 에서 가상함수를 호출하면 원본 CType 의 가상함수를 실행하게 됨 실습 관련실습에서 Item* 배열에 있는 자식 클래스(*Weapon, *Armor) 값들이 존재한다.Item의 소멸자에 가상함수를 붙여놓으면 자식 클래스의 소멸자에도 VPtr 이 생성되고 가상함수 테이블에서 소멸자를 가상함수로서 관리한다.Item* 배열에 있는 객체들을 순회하면서 delete를 이용해 하나씩 메모리를 해제한다.이 때 *Weapon, *Armor 같은 생성된 자식 클래스 주소 값을 가리키는 포인터들이 해제된다.그리고 해당 주소값에 있는 Weapon, Armor객체들이 소멸된다.이 때 Item* 배열에 들어있기는 하지만 *Weapon 주소는 Weapon 타입 VPtr을 가지고 있으므로 Weapon 의 가상함수인 ~Weapon()을 호출한다. 형변환이 암시적, 명시적과 관계없이 포인터에 들어간 주소값이 어떤형태의 CType이냐에 따라 가상함수 function()이 호출된다고 이해하면 될까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
단축키 질문합니다
17분37초에서 복사할 때 사용하신 단축키가 무엇인가요???
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
처음 실행 화면이 다르고 실행도 에러가 뜹니다
section .textglobal mainmain: ;write your code here xor rax, rax ret 강의 자료와는 달리 맨 처음 실행화면에 #include로 시작하는 구문도 뜨지 않고 이렇게만 뜨는데 버전이 달라지면서 오류가 뜬 걸까요? C:\Users\USER\AppData\Local\Temp\SASM\program.asm:1: error: label or instruction expected at start of lineC:\Users\USER\AppData\Local\Temp\SASM\program.asm:9: error: parser: instruction expectedgcc.exe: error: C:\Users\USER\AppData\Local\Temp\SASM\program.o: No such file or directory hello world를 실행하면 이렇게 뜹니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이중 포인터를 이용한 값 변경 질문입니다.
이중 포인터를 이용한 값 변경 질문입니다.const char* msg = "Hello"; 1 번 함수 void SetMessage(const char* msg) { msg = "Bye" // 값이 변경되어지지 않음. // *msg = "Bye" <= 불가능, 식이 수정할수 없는 lvalue } 2 번 함수 void SetMessage(const char** msgPtr) { *msgPtr = "Bye" // 값이 변경됨. }1번 : 함수의 경우 msg는 역참조가 불가능1. 역참조 시 const 타입 주소로 이동. 2. const 타입은 값을 변경할 수 없는 형태임 3. 그래서 1번 함수에서 msg를 역참조해서 값을 변경하는 것은 불가능.2번 : 함수의 경우 msgPtr은 역참조가 가능1. msgPtr은 "Hello"주소값을 가지고 있는, msg 포인터를 가리키고 있음.2. 역참조시 msg 포인터로 이동.3. *msgPtr = "Bye"; <= 이 부분에서 혼동이 와서 질문드립니다.질문 : 2번의 연장선Hello의 시작 주소값은 편의상 HAddr 이라고 칭하겠습니다.1. msg는 8바이트 형태의 포인터이다.2. msg는 "Hello"의 시작 주소값 HAddr을 가지고 있다.3. 해당 시작 주소값은 'H'라는 값을 가지고 있다.4. *msgPtr = "Bye"5. 수행시 - 메모리에 'B', 'y', 'e'라는 값을 가지는 const char* 타입 변수 생성.6. *msgPtr을 통해 msg 포인터를 역참조. - msg포인터가 가지고 있는 값 HAddr을 'Bye'의 시작 주소 값 B의 주소값으로 변경?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
nullptr 자체 구현 과정에 대하여 질문이 있습니다.
안녕하세요.nullptr 수업 중 알려주신"nullptr 자체 구현 과정"에 대하여 질문이 있습니다.#include <iostream> using namespace std; #include <vector> #include <list> #include <deque> #include <map> #include <set> #include <algorithm> void Test(void* ptr) { cout << "Test(*)" << endl; } class NullPrt { public: // 그 어떤 타입의 포인터와도 치환 가능 template<typename T> operator T* ()const { return 0; } // 그 어떤 타입의 멤버 포인터와도 치환 가능 template<typename C, typename T> operator T C::* () const { return 0; } private: void operator&() const; // 주소값 &을 막는다. }; const NullPrt _NullPtr; int main() { Test(_NullPtr); return 0; }위와 같은 코드에서 Test(_NullPtr);를 실행하면,왜 NullPtr의 template<typename T> operator T* ()const { return 0; }로 진입하는 지에 대하여 조금만 더 자세히 설명해주실 수있을까요?Test 함수로 _NullPtr 객체를 보내주는데,왜 operator T* () const로 진입하지는 약간 이해가 되지 않습니다. 혹시 관련하여 참고할만한 구글링 키워드를 알려주셔도 좋습니다. ^^항상 잘 배우고 있습니다.감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 실습 강의 질문합니다.
포인터 실습 강의를 다 보고 연습할 겸 플레이어를 만들고 플레이어가 레벨업을 할 경우 영구적으로 스탯이 증가하는 것을 만드려고 하는데 생각대로 안되더군요..포인터만 사용해서는 만들 수 없는 건가요? struct statinfo{ int hp; int atk; int def;};void player(statinfo* playerinfo){ playerinfo->hp = 300; playerinfo->atk = 30; playerinfo->def = 20;}int playerup(statinfo* abc){ int up = (abc->hp) + 12; cout << up << endl; return up;}int main(){ statinfo playerstat; statinfo* playerstatPTR = &playerstat; player(&playerstat); cout << playerstat.hp << endl; cout << playerstatPTR->hp << endl; playerup(&playerstat);}
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수형식에 대해서 궁금합니다
함수형식에 대해서 궁금합니다현재 c++ 강의 함수쪽 단원을 배우고있는데요 void main (float a, float b);{~}이런 형식으로 가르쳐주셨고 c++에서 잘 써먹고 있습니다. 인터넷에서 c++ 이 아닌 쉐이더코드쪽을 보면 void main (out vec4 a, in vec2 b){~} 이렇게 되어있는 것도 있더라구요.왜 오른쪽에 out 과 in 이 공존하는건가요?c++과 glsl 의 문법의 차이인건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
delete[] 할때 소멸자 실행 순서
delete[]를 통해 다수의 클래스를 지울 때 실행되는 소멸자의 실행순서는 고정인가요?제 컴퓨터 환경에서의 한 간단한 실험에서는 생성순서의 역순으로 소멸자가 실행었습니다만 다른 상황에서도 그러한 방식이 유지될것이라는 확신을 얻을수는 없었습니다.delete의 내부동작방식이 cpu에 따라, 컴파일러에 따라 상이하게 동작할 여지가 있나요? 다시 말해 delete는 자기결정적인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
안녕하세요. rookiss 강사님. c++ part1 파일분할관리 단원설명과 관련하여 실제 실습시 환경설정문제로 실행이 제대로 안되는 문제를 해결하고자 질문을 올리게 되었습니다.c++ 파트1 파일 분할관리 단원에서 test1.cpp, test.h, cpp_study.cpp로 파일을 분할해서실제 실행해보는 과정에서 다음의 문제점을 발견할 수 있었습니다.hello world가 안뜨는 문제점을 발견하여, 이 문제점이 무엇인지 일단 파악하고자 break point를 걸어서 디버깅을 해보았습니다. 특이한건 f11로 void Test_2()함수를 타고 가보고자 시도를 하였으나 무슨 이유인지는 모르지만 컴파일러가 void Test_2()를 지나가고 바로 return 0;으로 가는 것을 확인할 수 있었습니다.이게 왜 그런지 모르다보니 구글에서 해당 사례가 있는지를 검색하였으나 검색을 해도 저와 비슷한 사례가 나오지 않다보니, 다시 강사님의 강의를 보던 도중 한가지를 확인할 수 있었습니다.왠지 지금 네모로 체크한 설정여부 유무가 문제가 아닐까 조심스럽게 추측해보았습니다.이 설정은 어떻게 할 수 있는지 문의드립니다.혹시라도 비슷한 사례를 경험하신 분들이 계시면 답변을 부탁드리고자 합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
핵심을 말하자면정렬함수 풀이과정을 하나하나 써보고디버그로 확인해봐서 알겠는데..뭔가 명확하게 머리에 들어오질 않습니다..구구절절 써보자면요처음에 정렬함수 만들떄비교를 위해 두개의 반복문이 필요하고작은 값을 저장할 변수가 필요하고비교를 위한 조건문이 필요하고작은 값을 변수에 저장하고 위치를 섞어 준다 까진 생각을 했는데두번쨰 반복문 조건부분과비교하는 부분의 코드구현을 못하겠더라구요..이유가 저는 문제를 있는 그대로 안보고혼자 작은 값을 아직 모르니 값을 다 비교를해야된다고 생각해서 반복문 두개를 다0번쨰부터 시작하니까 1과 다른 숫자를 비교하니 진행이 안되더라구요..그래서 풀이과정을 봤는데 이해가 안가서실행순서와 풀이과정을 메모장에 하나하나적고 디버그 모드로 확인해가면서 봤는데도아직 이해가 잘 안됩니다..더 문제는 뭐가 정확하게 이해가 안되는지를 모르겠어요..어떻게 동작하는지를 알겠는데머리속은 명확하게 이해를 못한거 같으니미칠꺼 같아요..제가 왜 이해를 못할까요?비교하는 조건 쪽을 제가 이해를 못하는거 같은데왜 if (numbers[b] < numbers[tx]) 일까..하나하나 실행순서를 전개해보고 반대로 했을떄 어떤지 해봐서 왜 if (numbers[b] < numbers[tx]) 인지는알겠는데.. 왜 머리에 안들어 올까요..뭘 더 해봐야 될까요..
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
strcpy() 구현 관련 질문
포인터로 strcpy()를 구현할 때,1 char* StrCpy(char* dest, const char* src)2 {3 char* ret = dest;4 while (*src != '\0')5 {6 dest = src;7 dest++;8 src++;9 }10 *dest = '\0';11 return ret;12 }dest 포인터 변수를 반환하면 main 함수에서 출력 시 아무것도 출력 되지 않고, 3번째 줄처럼 dest 주소를 다른 char형 포인터에 저장하고, 해당 포인터 변수로 main함수에 반환을 해야 정상적으로 출력이 됩니다.어떤 이유에서 dest 포인터 변수는 출력이 안되는지 모르겠습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
어떠한 경로에서 파일 혹은 디렉토리를 찾지 못한다는 것 같은데 어떻게 해결 할 수 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
클래스 타입의 포인터 질문합니다
class Knight(){public:void GetHp(){}}int main(){(1) Knight k1k1.GetHp()(2) Knght *k1k1->GetHp()함수를 호출할 때 멤버 함수 같은 경우 어떤 특정 객체의 주소를 넘겨주는 것까지 포함하고 있는 규약을 따르고 있고 마치 포인터와 유사하듯이 k1의 주소 즉 Knight의 스택 주소를 넘겨줘서 멤버 함수 내부에서 자기 자신의 정보를 수정할 수 있다고 알고 있습니다 .k1이 포인터 타입일 경우와 아닐 경우 둘 다 Knight의 주소를 담고 있지만 큰 차이점으로는 k1은 Knight의 스택 주소를 갖고 있고, 그 스택 영역이 끝나면 k1으로 더 이상 Knight의 접근할 수 없고*k1은 Knight의 힙 영역에 주소를 갖고 있는 것이 큰 차이점이라고 보면 될까요?int a=1 int *b=&a 그리고 포인터는 b의 변수에 a의 주소를 갖고 있고 그 주소를 타고 가면 int타입이 있을 것이라고 했는데 Knight *k1는 k1의 어떤 주소가 담겨 있는데 그 주소로 가면 Knight 타입이 있다는 의미인데 k1의 어떤 주소를 갖고 있는지 명시하지 않아도 Knight의 주소를 갖고 있을 것이라고 어떻게 아는 것일까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
입력값을 enum 값에 넣어주는거 이제 막혔나요?
7:20 분 처럼입력값을 enum 값에 넣어주려고 하는데'형식 이름을 사용 할 수 없다' 라고 뜨는데막힌건가요??오류문 온라인 검색해기랑구글에 영어로 검색해봐도관련 자료 뜨는게 없는데..이럴떈 어떻게 검색하는게 좋을까요??
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
템플릿 특수화 관련 질문
안녕하세요. c++ 강의 중 "템플릿 기초 #1" 듣다가 질문이 생겨 남깁니다.템플릿 특수화가 필요한 이유를 모르겠습니다. 아래 두 코드를 비교했을 때 굳이 템플릿 특수화를 해야 하는 이유가 무엇인가요? 또, 템플릿 특수화가 필요한 상황은 어떤 상황이 있나요??<템플릿 특수화 사용한 경우>template<typename T> void Print(T a) { cout << a << endl; } template<> void Print(float a) { cout << "템플릿 특수화" <<endl; cout<< a << endl; }<오버로딩 사용한 경우>template<typename T> void Print(T a) { cout << a << endl; } void Print(float a) { cout << "템플릿 특수화" <<endl; cout<< a << endl; }컴파일러에 돌려보니 결과도 똑같이 나옵니다. 너무너무 궁금합니다ㅠㅠ 감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 관련 질문합니다!
배열을 포인터 변수로 받을 때 포인터 변수는 배열의 시작 주소를 갖고 있는 변수로 알고 있습니다! 예를 들어 배열의 시작 주소를 담고 있는 포인터 변수가 *str이라면근데 함수 내부에서 배열에 인덱스 값에 접근할 때 str[i] 접근하는데 포인터 변수를 어떻게 배열처럼 사용할 수 있는지 그 원리를 잘 모르겠습니다..!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Unable to start assembler. Check your settings.
이 에러가 뜬 경우에는 https://github.com/Dman95/SASM/releases/download/v3.12.1/SASMSetup3121.exe이 버전을 다운로드 받은 후, 세팅에서 에셈블리 옵션을 아래처럼 변경해주시면 됩니다.-g -f win64 $SOURCE$ -l $LSTOUTPUT$ -o $PROGRAM.OBJ$