묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
전방선언을 공부하다가
요새 언리얼 작업을 하면서 전방선언에 대해 조금 깊이 공부하고 싶어서 다시 이전 수업을 찾아와 복습을 하고 있습니다. 제가 궁금했던점은, 어차피 .cpp 정의부에서 헤더파일을 추가할거라면 헤더에 추가하는것과 무슨 차이가 있는지, 즉 전방선언을 함으로써 이득이 될 수 있는 부분이 무엇인지가 궁금해서 다시 찾아왔는데, 아쉽게도 해당 강의에서는 구체적인 설명이 없었던것 같아서 질문을 남깁니다. 구글링을 찾아본바론, 결국 컴파일 시간에서 이득을 보려고 하는것이 가장 큰 이유라고 알게 되었습니다. 빌드시간이 워낙 길어진다는건 언리얼 프로젝트를 조금만 진행해봐도 커피 한잔 타고 와야 할만큼이나 답답함을 느낍니다. 만약 정말 이러한 길고 긴 컴파일 시간, 빌드 시간을 줄이고자 하기 위함이었다면, 제가 언리얼과 같은 프로젝트(가벼운 개인 프로젝트)를 진행할때 웬만하면 거의 전부다 전방선언을 할 수 있도록 설계하는게 프로젝트 관리에 있어서 효율적인가 궁금합니다. 그리고 말씀드린대로, 참조하려는 헤더파일에 변경이 생겨도 헤더파일의 재컴파일이 이루어지지 않는 이점 때문에 전방선언을 애용하는건지, 제가 개념을 제대로 이해했는지도 궁금합니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제 접근법에 관해 질문 드립니다.
안녕하세요 선생님 강의 잘 듣고있습니다. 본 문제도 동적 프로그래밍 알고리즘이 적용된 문제라고 봐도 되나요?
-
미해결홍정모의 따라하며 배우는 C++
클래스 설계
안녕하세요. 12.7 강의를 보고 클래스 설계에 관하여 질문드립니다. 추상클래스 예제로 Animal 을 이용해 예제를 보여주셨는데요. 인터페이스 클래스로 구성하면 string을 새로운 클래스에다가 넣고, IAniamal 클래스에 speak() 함수만 넣어놓고 구성할 수 있자나요. - 인터페이스 + 상속 이용 - 추상클래스를 이용한 설계 이런식으로 그렇다면, 추상클래스로 설계하는 것이 좋을까요? 인터페이스 형식으로 설계하는 것이 좋을까요??
-
해결됨홍정모의 따라하며 배우는 C++
20.6 nanogui 실습 중 오류 발생 문제입니다.
영상에서 설명해주신 것과 같이 properties를 설정하고 빌드했습니다. exe파일 실행 시 abort() has been called 오류 팝업이 출력 됩니다.디버그 시도 시 bad allocation execption이 발생하네요. 해결할 방법을 찾지 못해 도움 부탁드립니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
클래스 크기 질문드립니다
Class Temp { void asd() int a; char b; } 클래스의 크기를 결정할 경우 멤버 변수는 클래스의 메모리 크기에 취급이 되고 함수는 코드영역에 올라가서 클래스 메모리 취급되지 않는다고 알고 있습니다 그러면 Temp클래스의 경우 int형 4바이트 char형 1바이트 해서 총 5바이트 크기로 알고 있습니다 여기서 의문이 드는게 asd라는 함수는 코드영역에 있어도 접근할 수 있는 주소가 필요한데 함수의 크기를 전혀 잡지 않는 부분이 이해가 되지 않습니다 아니면 클래스에서 함수를 호출 할때 접근하는 다른방법이 있는지 궁금합니다
-
미해결홍정모의 따라하며 배우는 C++
AutoPtr<Resource> res = new Resource
안녕하세요. 아래 두분이 질문을 주셨었는데요.. AutoPtr<Resource> res = new Resource 이것은 1. res 객체를 만들고 2. copy constructor 이 실행되어 3. new Resource의 주소가 4. res의 m_ptr 에 복사된다. 이렇게 이해하면 되는것인가요?
-
미해결홍정모의 따라하며 배우는 C++
강의내용중 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1. 클래스의 멤버함수 정의 할 때 인스턴스의 이름을 출력하게 하는 방법이 있는지 궁금합니다. 예를 들어서 Student s1; 을 정의하고 나서 s1.function(); 을 수행하면 "s1" 처럼 인스턴스의 이름을 출력하게 하는 기능이 있는지 궁금합니다. 2. string getName() { return m_name;} 을 수행할 때 const를 붙이지 않으면 안되는 이유가 궁금합니다. (string getName() const 라고 해야만 되는 이유) 3. 출력 연산자 오버라이딩 할때 friend ostream & ... 에서도 마찬가지로 '&' 를 붙이지 않으면 기능하지 않는 이유에 대해서도 궁금합니다 감사합니다
-
미해결홍정모의 따라하며 배우는 C++
대입연산자 오버로딩 리턴형
클래스내에 deep copy를 하는 복사 생성자와 deep copy를 하는 대입연산자가 있다면 deep copy를 한다는 측면에서는 기능이 갔다고볼수있습니다. 대입연산자를 오버로드 할때 카피생성자 처럼 리턴형이 없이 void operator= (....) 해도 데이터를 복사하는 데에는 이상이 없는데 레퍼런스로 리턴해주는 이유라도있나요? 코드도 첨부합니다 class String { private: char* m_data = nullptr; unsigned m_length = 0; public: String() {} String(const char* source) { //assert(source); m_length = strlen(source) + 1; m_data = new char[m_length]; data_copy(source); } String(const String& source) { cout << "카피생성자" << endl; deep_copy(source); } String& operator=(const String& source) { cout << "대입연산자" << endl; if (m_data == source.m_data) return *this; delete[] m_data; deep_copy(source); return *this; } void deep_copy(const String& source) { m_length = source.m_length; if (source.m_data != nullptr) { m_data = new char[m_length]; data_copy(source.m_data); } else m_data = nullptr; } void data_copy(const char* source) { for (unsigned i = 0; i < m_length; ++i) { m_data[i] = source[i]; } } };
-
해결됨홍정모의 따라하며 배우는 C++
13:50 질문드립니다.
#include <iostream> #include <array> using namespace std; int& get(array<int, 100>& my_array, int idx) { return my_array[idx]; } int main() { array<int, 100> my_array; my_array[30] = 10; get(my_array, 30) = 1024; return 0; } 강의 13:50 내용입니다. get(my_array, 30) = 1024; 여기서 get함수가 레퍼런스로 반환이 되는데, 참조자의 우변에는 L-Value가 들어가야 한다고 알고있습니다. 그래서 1024가 들어갈 수 없다고 알고있었는데 여기선 실행이 잘 돼서 헷갈립니다. const 참조자로 반환된것도아닌데 어떻게 가능한건가요?
-
해결됨홍정모의 따라하며 배우는 C++
delete 전과 후의 주소값이 동일한 이유가 궁금합니다.
6.11 강의 중 아래 코드에서 궁금한 점이 있습니다. delete를 통해 ptr의 메모리를 해제한 후에 ptr 에 nullptr을 넣어주면 다른 메모리를 할당 받는 걸로 이해하고 있었는데, 출력해보니 delete 하기 전과 후의 ptr의 주소값이 같습니다. 제가 잘못 이해한 부분이 있는 것 같은데, delete 후에 ptr의 주소값이 변하지 않는 이유에 대해 알려주시면 감사하겠습니다!
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
질문 visual studio 2019버전 max함수 헤더파일없이
안녕하세요 원래 max함수를 쓰기위해 include<algorithm>을 헤더파일에 입력해야 STL함수 max()함수를 쓸수있다고 알고있는데 2019년도 버전은 왜 #include <iostream> using namespace std; int main() { cout << "더 큰건 " << max(1, 2) << "입니다." << endl; } 이렇게만 해도 컴파일되는건지 궁금합니다. 알려주세요 ㅜ
-
미해결C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++
visual studio 2019버전 max함수 헤더파일없이
안녕하세요 원래 max함수를 쓰기위해 include<algorithm>을 헤어파일에 입력해야 STL함수 max()함수를 쓸수있다고 알고있는데 2019년도 버전은 왜 #include <iostream> using namespace std; int main() { cout << "더 큰건 " << max(1, 2) << "입니다." << endl; } 이렇게만해도 컴파일이 되는지 궁금합니다
-
미해결홍정모의 따라하며 배우는 C++
doSomething 매개변수주소 질문
안녕하세요 교수님, 이번강의도 너무 잘들었습니다 감사합니다. 강의에서 소개해준 예제 코드를 따라서 작성한후 실행을했을때 한가지 의문점이 들었습니다. 교수님계서 매개변수는 함수의 기능이끝난후에는 OS에 메모리를 다시 반환한다고 언급하셨는데, 제 생각에는 OS에 메모리를 반환한후 다시 함수를 호출했을때에는 다른메모리주소를 사용해야하는데 함수를 실행할때마다 항상 같은 메모리주소를 사용하는것이 조금 의문입니다. 제가 잘못이해한것인지 궁금하네요. 질문 읽어주셔서 감사합니다 코드내용 #include <iostream> using namespace std; void doSomething(int y) { cout << "In func " << y << " " << &y << endl; } int main() { doSomething(5); int x = 6; cout << "In main " << x << " " << &x << endl; doSomething(x); doSomething(x + 1); }
-
미해결홍정모의 따라하며 배우는 C++
내부클레스의 friend선언 중 errorC2511
안녕하세요, C++을 수강하는 타전공 학생입니다. 항상 양질의 강의와 수준높은 커뮤니티 질답에 감탄하며 감사히 수강하고 있습니다. 8.12 친구 함수와 클래스 friend강의의 마지막 부분에서 문득 한 클래스에만 friend 키워드를 쓰면 그 클래스의 내부 클래스에 저장된 private 멤버도 접근 가능하게 되는지 궁금해져서 다음과 같이 실험해보았습니다. #include <iostream> using namespace std; class A; // forward declaration class B { private: int m_value = 2; public: void doSomething(A& a, A::C& c); }; class A { private: int m_value = 1; public: // ---내부 클래스 C 추가---- class C { private: int m_value = 3; friend void B::doSomething(A& a, A::C& c); // 오류 발생! }; //-------------------------- friend void B::doSomething(A& a, A::C& c); // 오류 발생! }; void B::doSomething(A& a, A::C& c) { cout << a.m_value + c.m_value << endl; } int main() { A a; B b; A::C c; b.doSomething(a, c); return 0; } 클래스 A에 private멤버를 가진 내부 클래스 C를 추가하고 doSomething함수를 A와 C의 private멤버 둘다 사용하도록 조금 바꿨습니다. 주석 표시한 곳에 클래스 B내 doSomething멤버함수에 대한 선언이 incompatible하다는 오류가 발생합니다. 그리고 컴파일 해보니 어마어마한 컴파일에러가 나오는데, 근본적인 에러는 아래인거 같습니다. error C2511: 'void B::doSomething(A &,A::C &)': overloaded member function not found in 'B' 오버로드될 여지가 없어보이고, 함수이름, 파라미터를 토씨하나 안틀리고 복붙했는데.. 왜 이런 오류가 나는 걸까요? 위 오류가 난 두 줄을 friend class B;로 바꾸면 IDE상에선 오류가 없지만 여전히 위 컴파일에러가 뜨네요. 한편 궁금증으로 돌아가서, 첫 번째 오류 줄인 friend void B::doSomething(A& a, A::C& c);을 지워봤습니다. doSomething함수 내에서 A::C의 private멤버를 접근할 수 없다고 하는 것을 보니 내부 클래스 역시 따로 friend선언을 해주어야 하는거 같은데.. 오류가 떠서 확인할 수는 없었습니다.
-
미해결홍정모의 따라하며 배우는 C++
포인터 벡터에 대해 질문이 있습니다
class Lecture { private: vector<Student*>studnets; } 10분 40 초쯤에 선생님께서 Lecture class 가 사라지면 students instance 는 사라진다 하지만 student* 포인터가 가리키고 있는 원래 주소에 있는것들은 그대로 유지된다고 하셨는데 그렇다면 그 주소에 있는것들은 나중에 delete 을 사용하여 없애주어야하는거 아닌가요?
-
미해결홍정모의 따라하며 배우는 C++
int **mat = new int *[row] 제가 잘 이해한거 맞나요?
int **mat = new int *[row]; for (int r = 0; r < row; ++r) { mat[r] = new int[col]; } 이 부분이 이해하기 진짜 어려웠습니다.. 1번 봤을떈 이해가 안갔습니다 그래서 동적할당을 이해못해서 그런가해서 다시보고 생각하면서 코드 하나하나 다시 뜯어서 보고 다시 영상 보면서 코드를 보니까 아래처럼 이해를 했는데 이게 맞는걸까요? const int row = 3; const int col = 5; const int arr[row][col] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15} }; //출력하기 위해선 초기화를 해줘야됨 int **mat = new int *[row]; // int *[3]크기의 메모리 할당 / 초기화 //const int arr[row][col] ={1~15} 초기화 해주기 for (int r = 0; r < row; ++r) // 3반복 { mat[r] = new int[col]; //int *r1 = new int{1,2,3,4,5};처럼 초기화를 해야하는데 //하나하나 다 해줄 수 없으니 int *[5] 크기의 메모리 즉 [col]5개를 3번 반복해서 [r]에 1~15를 저장해줌 } for (int r = 0; r < row; ++r) // row 열 만들기 3 { for (int c = 0; c < col; ++c) // col 열 만들기 5 { mat[r][c] = arr[r][c]; //mat[0~2][0~4] } } //출력용 for (int r = 0; r < row; ++r) { for (int c = 0; c < col; ++c) { cout << mat[r][c] << " "; } cout << endl; } //delete for (int r = 0; r < row; ++r) { delete[] mat[r]; }
-
미해결홍정모의 따라하며 배우는 C++
7분쯤에 질문이있습니다
7분쯤에 선생님이 이런식으로 코딩을 해주셨는데 Mystring hello("Hello"); cout<<(int*)hello.m_data<<endl; { MyString copy=hello; cout<<(int*)copy.m_data<<endl; } 여기서 output 둘다 006AF320 로 같게 나오는데 m data 가 가지고 있는 값이 같다는건가요 아니면 m data 포인터의 주소값이 같다는 뜻인가요?
-
미해결홍정모의 따라하며 배우는 C++
구조체를 굳이 포인터나 참조를 해서 쓰는 이유가 있을까요??
Psrson person person.age =5; 이런식으로 쓸 수 있는데 사실 사용법도 비슷한데 굳이 포인터나 참조를 해서 사용하는 이유가 있을까요?
-
미해결홍정모의 따라하며 배우는 C++
int 와 char 의 차이
안녕하세요 강의 시청 중 int 와 char의 차이에 관해 궁금증이 생겨 질문드립니다. 강의에서 char은 아스키코드를 통해 정수로 데이터를 저장하므로 int 와 마찬가지로 사칙연산이 가능하고, 또 차이점은 같은 바이트에 이진수로 정수를 저장하지만 int 가 char보다 더 넓은 범위의 정수를 저장하는 것으로 배웠습니다. 여기서 좀 헷갈리는 것이 그럼 int 와 char 의 차이가 미묘합니다. char cValue = 69;// 아스키 코드 값을 저장하므로... cout<< cValue; //출력값 : E 위가 성립함은 이해가 갑니다. cout<< 'S' - 8; //출력값 : 75 그런데 이 윗줄의 출력값이 75의 아스키 넘버에 해당하는 K가 아닌 75가 출력될 수 있었던 이유가 궁금합니다. #질문에 참고한 링크입니다 1) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lsv400&logNo=100090853321 2)https://stackoverflow.com/questions/15869931/practical-difference-between-int-and-char
-
미해결홍정모의 따라하며 배우는 C++
매크로에선 식별자가 필요없는가? 에 대한 질문
안녕하세요! 1) 강의 4:68즈음에 #define MAX(a,b) ( (a) > (b) ) ? (a) : (b) 이런 식을 나오는데 함수와 다르게 a나 b에 대해 int 선언 같은 걸 안해줘도 되나요?? 2) 함수와 역할이 거의 흡사한 것 같은데 차이점이 뭔지 궁금합니다. 적용 범위의 차이인가요?