월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
24분경 if else문질문입니다.
그 땡겨진 자리 체크를 하는 이유가 데이터가 3 3이렇게 연속으로 있을경우 삭제된 3자리에 다시 3이들어가게 되는데 바로 ++it를하면 땡겨저 들어온3이 있음에도 불구하고 ++연산으로 다음으로 넘어가버리기 때문에 필요한 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문제가 생겼습니다 컴퓨터의 문제가 생겨 포멧을 했는데 2019버전을 다운을 받을수 없습니다
2022버전으로 해도 문제가 없는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
공부 방법에 대한 질문?
CPP 강의를 중후반까지듣고 알고리즘, 자료구조 강의를 듣는데 분명 배운내용임에도 불구하고 이게 뭐였지? 라는 생각으로 다시 해당하는 내용의 강의를 들으러가면 뭔가 처음 배우는 것 같은 느낌이 듭니다, 많이들 쓰는 문법이야 뭐 백준문제라도 풀어서 체득을 하겠는데 연산자 오버로딩?같이 애매한 것들은 뭔가 for문 별찍기같은 예제가 없는거 같더라구요... 그래서 그냥 그렇구나 하고 넘기면 나중에 사고가나서 다시 앞의 내용을 듣고 뭔가 알고있다 라고 하기도 애매한 상태로 변하고 다시 진도나가고 무한반복중인데 공부법 꿀팁이 있을까요...
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Test1.cpp에 대해 질문이 있습니다.
Test1.h Test1.cpp를 링크하는 부분은 이해가 가지만 main.cpp에서 Test1.cpp는 따로 링크해주지 않고 Test1.h만 링크해주면 되는 이유가 무엇인지 궁금합니다. cpp 파일들은 비주얼 스튜디오에서 컴파일을 할 때 알아서 링크가 되는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
깊은 복사 방식을 이용하여 복사 넘기기 할때 이런식으로 참조값을 사용해서 넘겨도 heep 메모리 영역에 정상적으로 생성 되나요?
일단 new 문법으로 heep 영역의 동적 할당을 할때 기본적으로 void* 주소값을 넘겨주는것으로 알고 있습니다 하지만 이것을 명시적으로? 예를들어 클레스가 하나 있다고 가정했을때 class Plyear 라는 클래스를 생성할때 Plyear plyear = new Plyear() 이런식으로 동적 할당역역을 사용하고 delete 문법을 사용하여 메모리를 delete plyear; 이렇게 하여 초기화 시키는걸로 알고 있습니다 여기서 전 & 타입으로 해보고 싶어서 이런식으로 바꿔봤습니다 클레스는 위와 동일하다 가정하고 Plyear &plyear = *new Plyear() 이런식으로 만들어 봤는데 여기서 한가지 의문이 들었습니다. 정상적으로 잘 만들어지긴 하는데 주소값을 입력 하면 깊은 복사로 만들었을때 복사 방식을 분명 제대로 줬음에도 불구 하고 heep 영역에 잡히는게 맞는지 이걸 확인할 방법이 보이지가 않아서 어떻게 확인할수 있는지 보다도 정확하게 만든게 맞는지 그게 궁금 합니다 ㅠㅠ 실제 코드는 아래와 같습니다 #include <iostream> using namespace std; #define out class Pet { public: Pet () { cout<< "Pet ()"<< endl; } Pet (const Pet& pet) { cout<< "Pet (const Pet& pet)"<< endl; } Pet& operator=(const Pet& pet) { cout<< "operator=(const Pet& pet)"<< endl; return *this; } virtual ~Pet () { cout<< "~Pet ()"<< endl; } public: int Pet_hp=50; }; class Plyear { public: Plyear () { cout<< "Plyear ()"<< endl; } Plyear (const Plyear& plyear) { cout<< "Plyear (const Plyear& plyear)"<< endl; } Plyear& operator=(const Plyear& plyear) { cout<< "operator=(const Plyear& plyear)"<< endl; _level=plyear._level; return *this; } virtual ~Plyear () { cout<< "~Plyear ()"<< endl; } public: int _level=0; }; class Knight: public Plyear { public: Knight () { cout<< "Knight ()"<< endl; } Knight (const Knight& kinght): Plyear(kinght) ,_pet2(*new Pet(kinght._pet2)) ,_hp(kinght._hp) { cout<< "Knight (const Knight& kinght)"<< endl; } Knight& operator=(const Knight& kinght) { cout<< "operator=(const Knight& kinght)"<< endl; Plyear::operator=(kinght); _pet2=*new Pet(kinght._pet2); _hp=kinght._hp; return *this; } virtual ~Knight () { cout<< "~Knight ()"<< endl; delete &_pet2; } public: int _hp=0; Pet& _pet2=*new Pet(); }; int main () { Knight knight; knight._hp=100; knight._level = 99; cout<<"----------------------------------"<<endl; Knight knight2; knight2=knight; knight2._pet2.Pet_hp=10; cout<<"----------------------------------"<<endl; cout<<"knight1.Pet_hp:"<< knight._pet2.Pet_hp <<endl; cout<<"knight2.Pet_hp:"<< knight2._pet2.Pet_hp <<endl; return 0; } 깊은복사를 이용하여 pet 부분만 새로운 객채를 생성하는 그런걸 응용해봤는데 이게 정상적으로 heep 영역에 메모리가 할당 되는지 그게 궁금한대 도저히 어떻게 확인할수 있는방법이 보이지 않습니다 ㅠㅠ 제가 좀 이상한건지 아니면 결벽증이 있는건지는 모르겠지만 heep 영역에 정상적으로 메모리가 할당 되었던건지 알려주시면 감사하겠습니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Hello World 빌드 하면 Warning! Errors have occurred in the build:오류가 생깁니다
Warning! Errors have occurred in the build: C:\Users\lee\AppData\Local\Temp\SASM\program.asm:15: error: comma expected after operand 1 gcc.exe: error: C:\Users\lee\AppData\Local\Temp\SASM\program.o: No such file or directory [11:38:19] Before debugging you need to build the program. 이런식으로 오류가 생기는데 어떻게 하면 될까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
weakCount가 무엇의 갯수인지 헷갈립니다
refCount는 이 객체를 참고하는 애가 몇 명인지 인데 _weakCount는 "weak_ptr가 몇개가 지금 이 객체를 참고하고 있는지 관리한다" 라는 말이 refCount는 참조하고 있는 복수의 shared_ptr의 갯수를 뜻한다면 weakCount는 받고 있는 shared_ptr 가 받고 있는 객체가 살아있는지 죽어있는지 0 아니면 1이라고 이해해도 될까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
iterator의 end()에 대해
iterator의 end()함수가 왜 마지막 요소가 아닌 마지막 다음을 가리키는지 이유가 궁급합니다! 뭔가 그렇게 설계한 이유가 있을것 같은데 혹시 그런 이유가 있을까요? 문득 생각난건 연결리스트를 처음 설계할때 노드(Node) 설계 부분에서 헤드 노드를 만드냐 안만들고 하냐 등등의 차이로 설계방식이 달라지는것처럼 iterator도 헤드 노드를 따로 만들어놨던게 아닐까 싶은데 혹시 이유가 있을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
한번만 더 질문드립니다 ㅠㅠ
void* pointer = malloc (sizeof (Monster)); Monster& m1 = *( ( Monster* ) pointer ); m1._hp = 100; m1._attack = 10; m1._mp = 5; free (pointer); 이런식으로 해도 작동이 되는데 혹시 제가 이해한게 맞는건지 정확하게 이해 한듯 느낌이 팍 왔는데 확인할 방법이 없어서 이렇게 질문드려봅니다 일단 pointer 이부분이 반환값이 void 형 주소값을 반환받는건데 Monster 이부분은 클레스 타입이므로 Monster클레스 타입의 주소값을 Monster*로 포인터를 만들어 줬는데 이 주소값과 pointer 주소값이 서로 만들어진 형식이 한쪽은 void 고 한쪽은 class 이므로 Monster* m1 = (Monster*) pointer 이런식으로 하는이유가 pointer 가 void 형식의 주소값인건 아는데 지금은 Monster*값을 쓸꺼야 하고 괄호를 열어서 (Monster*)이라는걸로 확인시켜 줬기 때문에 Monster* m1에 정상적으로 이식이 된거고 여기서 참조 형태로 바꾸고 싶어서 Monster& m1으로 바꿨으니 void로 주소값을 반환 하는 pointer 가 참조형태로 탈바꿈? 하기 위해서 앞에 *을 하나 더 찍는방식으로 참조 타입으로 이식 됬다 라고 판단 되는데 그럼 처음 답변해주셨던 (Monster&)*((Monster*)pointer ) 이분부분에서 굳이 (Monster&)이부분은 삭제해도 어차피 (Monster*)이부분에서 class 탑입으로 바꾸겠다고 했으니 생략이 가능한게 아닌지 위에 코드도 동일하게 주소랑 값들이 다 나오는데 혹시 제가 착각하고 있는게 있는지 ......아니면 정상적으로 제가 생각한게 맞는지 궁금합니다 ㅠㅠ 질문이 길어져서 죄송합니다 열심히 공부해서 꼭 게임한번 만들어 보고 싶어서 문법 열심히 공부하는데 시골이라 학원도 없고 오직 온라인으로 밖에 공부할수 없는 이 슬픈 현실이 너무 절 괴롭게 합니다 ..... 소중한 시간을 항상 내주시는거에 대해 정말 감사드립니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
new / delete 던 malloc / free 던 *말구 &값으로 넘기는법은 없는건가요?
class Monster { public: int _hp; int _attack; int _mp; }; void* pointer = malloc (sizeof (Monster)); Monster* m1 = (Monster*) pointer ; m1->_hp = 100; m1->_attack = 10; m1->_mp = 5; free (pointer); 요기서 포인터 부분을 전부 void* pointer = malloc (sizeof (Monster)); Monster& m1 = (Monster&) pointer ; m1._hp = 100; m1._attack = 10; m1._mp = 5; free (pointer); return 0; 이런식으로 바꿔줬습니다 메모리까지는 정상적으로 할당 하는듯 보이는데 마지막 free에서 예외가 발생했다고 정지가 되버리네요 혹시 여기서 &방식으로 참조방식으로 만들수는 없는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연산자에 대한 질문이 있어서 올려봅니다
연산자 오버로딩 #2 강의에서 Position operator++(int) { Position ret=*this; _x++; _y++; return ret; } 이버전과 Position& operator++(int) { _x++; _y++; return *this; } 이버전은 실제 차이가 없는게 아닌지 궁금합니다 어차피 return으로 리턴값을 받아올때 자기 자신의 주소값을 받아 오는데 *this 던 Position 의 ret에 복사 주소값을 받아오던 별차이가 없는게 아닌지 궁금합니다 아그리고 코딩하면서 생각해봤는데 윗버전은 좀 문제가 있어 보이는데 사실 이게 맞는게 아닌지 의문이 듭니다 Position operator++(int) { Position ret=*this; _x=ret._x++; _y=ret._y++; return ret; } 이렇게 되야 맞는말이 되는거 아닌지 그래야 말이 되는거 아닌가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
int->float는 확대변환 인데 왜 축소변환 오류가 나는걸까요?
int x =0; double y2{x}; 이렇게 하면 int가 float으로 바뀌는 거니 데이터가 손실되지 않고 확대변환 되는거 아닌가요? 왜 축소변환이 필요하다는 error가 뜨는 걸까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
강의 내용의 메모리 해제 관련 (메모리 누수)
강의 내용에 위와 같이 나오는 부분에서, Item에 들어가있는 Armor와 Weapon 클래스의 멤버 변수가 int attack 처럼 단순한 일반 변수만 있다고 했을때, 위의 경우도 여전히 메모리 누수 현상이 벌어지지 않나요? Item을 기준으로 delete를 했기 때문에, Armor나 Weapon의 int attack 멤버변수는 Item 소멸자만 호출되기 때문에 본인들의 소멸자가 불리어지지 않아서 해제되지 못하기 때문에 계속 쌓인다고 이해했는데 혹시 잘못 이해했을까요? 다른 질문내용을 살펴보니, 다른 학생은 상속된 자식의 멤버변수에 또다시 동적할당을 받는 포인터 변수가 있는 상황에서만 메모리 누수가 된다고 말하는것 같아서 이해가 안가서 질문을 추가로 남겨봅니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
정말 햇갈리는 부분이 있습니다(포인터&참조)
void CreatePlyer(Statinfo* Plyerinfo); struct Statinfo { int hp = 100; int attack = 10; int mp = 20; int defence = 10; }; Statinfo Plyerinfo; CreatePlyer(&Plyerinfo); void CreatePlyer(Statinfo* Plyerinfo) { Plyerinfo->hp = 300; } 요기서 이 빨간 부분을 전 참조형태로 보내고 싶습니다 그래서 이 빨간 부분을Statinfo& Plyerinfo 이렇게 바꾸고 밑에 있는 Plyerinfo.hp 이런식으로 바꿨습니다 그리고 그 위에 CreatePlyer(&Plyerinfo); 이부분을 CreatePlyer(Plyerinfo); 이런식으로 바꿨는데 참조되지 않는 어떤 형식이라고 자꾸 오류를 밷어 내는데 다른 int 형 이나 배열등등은 이런식으로 넘겨지는걸로 아는데 왜 struct 구조체는 안넘어 가는지 이해가 되지 않습니다 혹시 제가 지금 뭘 잘못하고 있는건지 알려주실수 있나요? 글을쓰고 한참 보고난 후에 뭐가 잘못됬는지 알았습니다 제일 위에 함수 선언하는곳에서 void CreatePlyer(Statinfo* Plyerinfo); 이렇게 선언을 해서 void CreatePlyer(Statinfo& Plyerinfo); 이런식으로 변환이 안되던 거였군요 이거 이렇게 바꾸니 오류가 사라졌습니다 ^^
- 해결됨[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가 생기면서 안되는 이유가 클래스간의 구성 요소(변수)가 전혀 다르기 때문인 거잖아요? 근데 왜 빌드는 통과하는 건가요?