월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
getter 코드 2개다 동일하게 작동할까요? (코드 첨부)
class Point { private: int x; int y; public: Point(int i = 0, int j = 0) : x(i), y(j) {} // Point(int i = 0, int j = 0) // { // x = i; // y = j; // } int getX() const {return x;} const int& getX2() {return x;} };위애서 getX() 랑 getX2() 둘다 동일한 걸까요?
- 미해결홍정모의 따라하며 배우는 C++
코드블럭스 build 와 run이 계속 안됩니다.
안녕하세요. 수업에서 말씀하신 것처럼 mingw도 따로 찾아서 설치를 했습니다. 그런데도 아래 사진과 같은 에러창이 뜨면서 build 와 run이 안되는데 코드블럭 부터 다 지우고 재설치 해야 할까요? 그리고 강의에서 말씀주신 것처럼 파일 위치로 들어갔는데 제 파일에는 Debug파일 폴더 자체가 아예 생성이 되지 않습니다. 어느 지점부터 잘 못됐는지 궁금하여 문의 드립니다
- 미해결홍정모의 따라하며 배우는 C++
10:30 코드 관련 질문입니다.
수업에서는 class A를 forward declaration하고 class B - class A - doSomething 함수 순으로 코드를 짜셨는데요. 아래 코드와 같이 class B를 전방선언하고, class A- class B - doSomething 함수 순으로 선언하면 에러가 나는데 왜그런가요? #include <iostream>using namespace std;class B;class A {private: int m_value = 1; friend void B::doSomething(A& a);};class B {private: int m_value = 2;public: void doSomething(A& a);};void B::doSomething(A& a) { cout << a.m_value << endl;}int main() { A a; B b; b.doSomething(a); return 0;} class A를 선언할 때 class B가 있다는 것을 알면 되니까 class B를 전방선언했고, class B 안에 doSomething함수라는게 있는지는 모르는 상태니까 doSomething함수 정의를 class B 밖으로 빼놓은 상태잖아요?그리고 class B 정의에선 class A라는게 있다는걸 알면 되는데 그건 위에 먼저 정의되어있구요.그 다음 마지막으로 doSomthing 함수가 정의되는데 doSomthing 함수가 a.m_value에 접근을 못하네요. class A의 멤버인 m_value를 public으로 바꿔주면 되긴 할텐데 이 수업의 주제와 안맞는 것 같고..class A는 위에 이미 정의되어있는데 왜 접근을 못하는지요? 잘 되는 수업상의 코드 대비 class 정의 순서+전방선언 만 바꿨는데??
- 미해결홍정모의 따라하며 배우는 C++
벡터와 스마트포인터 같이사용 ?
스마트 포인터가 메모리를 자동삭제해주고 , 벡터 컨테이너 도 포인터들을 자동으로 삭제해주는데벡터에 스마트포인터를 넣어서 사용하면 어떻게 되는건가요 ?
- 미해결홍정모의 따라하며 배우는 C++
function address출력 안되는 현상
warning과 함께 return1로 나옵니다. 어떻게 function address를 출력할 수 있을까요? compiler 문제같고 stackoverflow 찾아보니 매우 코드가 복잡해지던데 그런 방법들밖에 없겠죠?ㅠㅠ warning: address of function 'func' will always evaluate to 'true' [-Wpointer-bool-conversion]#include <iostream> using namespace std; int func() { return 5; } int main() { printf("%p \n", func); // 잘나옴 cout << func << endl; // 안나옴 return 0; }
- 미해결홍정모의 따라하며 배우는 C++
6:35 코드 질문
클래스 B 선언 부분에서, 생성자 선언후 빈{}는 무슨 용도인가요?? 아래 코드에서 17째줄 {} 입니다 #include <iostream>#include <string>#include <array>#include <limits>#include <vector>#include <algorithm>using namespace std;class B {private: int m_b;public: B(const int& m_b_in) : m_b(m_b_in) {}};class Something {private: int m_i; double m_d; char m_c; int m_arr[5]; B m_b;public: Something() : m_i(1), m_d(3.14), m_c('a'), m_arr{ 1, 2, 3, 4, 5 }, m_b(m_i-1) // 이게 member initializer. 물론 여기서 초기화 하고 20-22줄에서 다시 오버라이드도 가능 //m_i{1}, m_d{3.14}, m_c{'a'}로 하면 형변환이 안됨. 좀 더 엄격함. 자동으로 캐스팅이 안됨. { m_i = 2; m_d = 3.15; m_c = 'b'; } void print() { cout << m_i << " " << m_d << " " << m_c << " "; for (auto& e : m_arr) cout << e << " "; cout << endl; }};int main() { Something Some; Some.print(); return 0;}
- 미해결홍정모의 따라하며 배우는 C++
4.6 14:00 예제. int 입력인데 왜 퍼버에 남아있나요?
4.6 14:00 예제에 int age에 값을 1 입력 했는데 왜 그 값이 string에 넘어가는지 이해가 안됩니다. 이전 예제의 string name;에 jack jack을 입력한 경우는 띄어쓰기 때문에 버퍼에 jack이 남아있는 것은 이해를 했습니다. 그러나 int age;에 1을 입력하면 버퍼에 값이 안 남아 있어야 하는 것 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
15:55 return 생략시 쓰레기값 나오는 이유
getStruct() function에 retunr을 안넣어주면 trash value?가 나오는데 이유가 무엇인가요? (return 넣으면 제대로 작동해요)근데 trash value도 아닌 것이 동일한 값이 계속 나옵니다#include <iostream> using namespace std; struct S { int a, b, c, d; }; S getStruct() { S my_s{1, 2, 3, 4}; // return my_s; } int main() { S main_s = getStruct(); cout << main_s.a << endl; cout << main_s.b << endl; cout << main_s.a << endl; cout << main_s.b << endl; } >> 15644 1 15644 1
- 미해결홍정모의 따라하며 배우는 C++
비트 연산 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 14분에 item3 를 사용했을때items_flag &= ~opt3; 를 하셨는데items_flag ^= opt3; 로 해도 괜찮은가요?둘 사이에 차이가 있는지 아니면 같은 건지 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
포인터 질문있습니다.
안녕하세요, 아래 두 코드가 동일하게 작동해야 한다고 생각했는데, 1이 틀린 이유가 궁금합니다.1. typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } 2. void bar(const int* ptr) { int val = 1; ptr = &val; } 1 full code #include <iostream> using namespace std; typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } int main() { int length2 = 2; pint ptr2 = &length2; bar2(ptr2); }
- 미해결홍정모의 따라하며 배우는 C++
복사 생성자 부분에서 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 9.11, 11분 21초 입니다.교수님께서 복사 생성자를 MyString(const MyString &src) { cout << "Copy constructor" << endl; m_length = src.m_length; m_data = new char[m_length]; if (src.m_data != nullptr){ for (int i = 0; i < m_length; i++) m_data[i] = src.m_data[i]; } else m_data = nullptr; } 이렇게 정의 하셨는데 해당 코드에서는 m_data의 제일 끝에 널 문자를 두지 않습니다. 제가알기로 문자열의 끝부분에는 널문자를 둔다고 기억하는데 왜 이렇게 해도 되는지 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
전처리기 질문
#include <iostream> #include <algorithm> using namespace std; #define MY_NUMBER 333 #define MAX(a, b) (((a) > (b)) ? (a) : (b)) //#define LIKE_APPLE void doSomething() { #ifdef LIKE_APPLE cout << "Apple " << endl; #endif #ifndef LIKE_APPLE cout << "Orange" << endl; #define LIKE_APPLE doSomething(); return; #endif } int main() { doSomething(); //cout << MAX(1+3+4-3,2) << endl; //cout << std::max(1 + 3, 2) << endl; return 0; }위에서 doSomething()안에서 LIKE_APPLE이 정의되어있지 않았을 시, #define LIKE_APPLE로 정의를하고싶은데, 불가능한가요? GPT를 돌려도 원하는 답이 나오지 않아서,,,,
- 미해결홍정모의 따라하며 배우는 C++
min_score 질문
int main() { //const int num_students = 5; int scores[] = { 84,92,76,81,56 }; const int num_students = sizeof(scores) / sizeof(int); int max_score = 0; int min_score = 0; int total_score = 0; for (int i = 0; i < num_students; i++) { total_score += scores[i]; //max_score = (max_score < scores[i]) ? scores[i] : max_score; if (max_score < scores[i]) { max_score = scores[i]; } if (min_score > scores[i]) { min_score = scores[i]; } } double avg_score = static_cast<double>(total_score) / num_students; cout << max_score << endl; cout << min_score << endl; return 0; } 여기서 min_score값을 100으로 올리니까 값이 나오는데 min_score값을 왜 올려야 하는건가요??
- 미해결홍정모의 따라하며 배우는 C++
한글입력을 받을 수 없어요.
검색으로도 해결하지 못해 질문합니다 ㅠㅠㅠ다른컴퓨터로는 문제없이 되는데 주로 사용하는 컴퓨터는 이래서 너무 답답해요.
- 미해결홍정모의 따라하며 배우는 C++
Internal Linkage 질문
25:10 초 쯤부터Internal Linkage 에 대한 설명을 하십니다.int g_a = 1;이 Internal Linkage 로 개별 cpp파일 안에서만 전역변수처럼 작용한다고 하셨습니다. 그런데 그 후에 26분 쯤에서는static int g_a = 1; 에서 static이 이 변수가 다른 cpp파일에서 쓰이지 못하게 제한해준다고 하셨는데,이미 제한해줄 게 없이 이거는 이미 Internal Linkage 변수가 아닌가요..?static 이 없으면 파일 안에서만 전역변수가 되는 것이 아니라, 전체 파일에서의 전역변수가 되는 것이고 static이 있어야만 파일 내의 전역변수가 되는 건가요?이 부분을 여러번 돌려봤지만 너무 헷갈려서 질문 드립니다.
- 미해결홍정모의 따라하며 배우는 C++
4.2 헤더파일에서 extern을 초기화시킬 때
45분 31초쯤에 선생님께서,새로운 cpp 파일 Myconstants.cpp를 만드시고 그 안에extern const double pi(3.141592);extern const double gravity (9.8);이렇게 external linkage 전역 변수들을 초기화시키고,header file 안에는extern const double pi;extern const double gravity;이런식으로 선언만 해주셨습니다.이렇게 했더니, 헤더파일 안에 있는 pi를 가져가서 사용하는 서로 다른 cpp 파일에서의 pi의 메모리 주소가 같아졌습니다...여기서 헷갈리는 부분이 있습니다...물론 external 변수들은 꼭 초기화를 1번만 해주어야 한다는 사실은 이해하고 있습니다.그런데 왜 굳이 헤더파일에서 초기화를 시켜주지 않고 다른 cpp 파일에서 초기화를 시켜준 것인가요?제가 실험 삼아 선생님께서 하신 것과 그 반대로,다른 cpp 파일에서는 선언을 하고 헤더 파일에서는 초기화를 해주었습니다. 그랬더니 빌드할 때 error가 발생합니다...제가 한 방법과 선생님께서 하신 방법에 어떤 큰 차이가 있길래 한곳에서는 error 없이 잘 실행되고 나머지에서는 error가 발생하는 걸까요?ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
4.2 extern의 존재 유무
선생님께서 45분 쯤에 말씀하셨던 코드들을 좀 더 이해해보고 싶어서 이렇게 해보았습니다.<Header File constant.h>#pragma oncenamespace Constants {extern const double pi(3.141592);extern const double gravity(9.8); } <test.cpp>#include <iostream>#include "constant.h"void doSomething() {using namespace std;cout << "In test.cpp " << Constants::pi << endl;} <main.cpp>#include<iostream>#include "constant.h"using namespace std;void doSomething();int main() {cout << "In main.cpp file " << Constants::pi << endl;doSomething();return 0; } 여기서 궁금한 점이 헤더파일 안에 있는 const 변수들 앞에 extern이 없으면 아무런 문제가 없지만,extern을 붙이면 문제가 발생합니다..왜 extern을 붙이기만 하면 오류가 발생하는 것일까요...?extern linkage도 결국에는 전역 변수 중 하나인데 말입니다...
- 미해결홍정모의 따라하며 배우는 C++
4.2 전역 변수의 값을 바꿨을 경우
int a = 1;void doSomething() {++a;cout << a << endl;}int main() {int a = 10;doSomething();doSomething();doSomething();doSomething();}선생님께서 19분 38초 쯤에 이 코드에 관해서,<이런 식으로 int a = 10을 추가해 무의식적으로 a가 doSomething() 안에서 10이 출력되길 바랄 수 있는데 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다.그럼 바뀐 값이 doSomething()에서 출력되는 것>이라고 설명하셨습니다.그런데,선생님께서 설명하신대로라면, 바뀐 값이니 10, 11, 12, 13이 나와야 하는데,저 코드를 출력하면 2, 3, 4, 5가 출력됩니다...혹시 선생님께서 잘못 설명하신 걸까요?ㅠ그래서 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다는 설명도 헷갈립니다ㅠ
- 미해결홍정모의 따라하며 배우는 C++
char *name vs const char *name
안녕하세요,전자는 에러나고 후자는 ok인데, 그 이유가 "string literal은 constant array of chars이므로, pointer 또한 const이어야 한다"라고 다른 곳에서 설명을 봤습니다.(https://stackoverflow.com/questions/61601872/why-do-string-literals-char-in-c-have-to-be-constants)이 설명과 "기호적 상수"개념이 어떻게 연결될 수 있는지 궁금합니다. (사실 지금 예시에서 "기호적 상수"가 어떤 의미인지 제대로 모르겠습니다.)
- 해결됨홍정모의 따라하며 배우는 C++
연습문제 % 없이 풀 수 있나요?
제 기억엔 % 연산자를 배운 기억이 없어서요..!검색해서 풀기는 했는데 %연산자 활용하지 않고도 풀 수 있는 예제인가요?방법이 있다면 알고 싶습니다!!30분간 머리를 싸매고 풀어내긴 했는데, 이게 의도하신 연습은 아닌 것 같아서요..! 사실상 %를 풀어쓴 게 아닌가 싶기도 하고요..ㅠ