월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
\a 가 소리가 안날때
지난강의에서도 그렇지만 \a가 비프음을 출력하는 기능..? 단어를 뭐라고 표현해야될지 모르겠지만 어쨌든 \a가 그런 역할을 하는데 제 컴퓨터에서는 소리가 안나서 어떤설정이 문제인지 궁금합니다.- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 해결됨홍정모의 따라하며 배우는 C++
13분 교수님 코드 그대로 작성시 에러가 납니다.
clion에서 c++ 공부하고 있는데 #include <iostream> using namespace std; int& get(std::array<int,100>& my_array, int ix) { return my_array[ix]; } int main() { std:: array<int, 100> my_array; my_array[30] = 10; get(my_array,30) = 1024; cout << my_array[30] << endl; return 0; }위와같이 코드를 짰을때 사진과 같은 에러가 나는데 왜 이런걸까요 ?
- 미해결홍정모의 따라하며 배우는 C++
과제 괜찮은지 확인 부탁드립니다~
잘 모르는 부분은 조금씩 참고해서 하긴 했지만, 이런식이면 괜찮을까요? #include <iostream>using namespace std;int sum1(int a,int b){ int s1 = a + b; return s1;}int sum2(int c,int d){ int s2 = c * d; return s2;}int sum3(int e,int f) { int s3 = e / f; //밑에서 입력받은 e,f를 나눠준뒤, s3에 저장한다. return s3; //계산된 s3를 밑의 main에 return 시켜준다. 그 뒤에 바로 출력된다.}void textPint(){ cout << "코드가 종료되었습니다." << endl; return; }int main(){ int a,b; cout << "더할 두 숫자를 입력하세요." << endl; cin >> a >> b ; cout << "두 수의 합은 : " << sum1(a, b) << " 입니다."<< endl; int c,d; cout << "곱할 두 수를 입력하세요." << endl; cin >> c >> d ; cout << "두 수의 곱은 : " << sum2(c, d) << " 입니다."<< endl; int e,f; //cint에서 입력받을 값을 미리 지정 cout << "나눌 두 숫자를 입력하세요." << endl; cin >> e >> f ; //값을 입력 받는다. cout << "두 수룰 나눈 값은 : " << sum3(e, f) << " 입니다."<< endl; //sum3에 입력받은 e,f를 저장 textPint(); return 0;}
- 미해결홍정모의 따라하며 배우는 C++
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
분명 어디서 배운것 같은데요변수들이 메모리에 저장될때 따닥따닥 붙어서 저장되는게 아니라 변수들끼리 조금씩 떨어뜨려서 저장된다고 알려주셨던거 같은데 어느 강의에서 들었는지 기억이 나질 않네요예를 들어서 float형 변수를 연속으로 3개 저장한다고 할 떄 float가 4바이트니까 메모리 4칸X3 = 12칸 으로 딱떨어지도록 저장하는 것이 아니라 4칸 사이사이에 메모리가 조금씩 더 들어가는 식으로 저장된다고 하셨던 수업인걸로 알고 있습니다 검색할때도 구조체가 메모리에 저장될 때 왜 더 큰 메모리가 필요한가요변수가 메모리에 저장될 떄 왜 더 큰 메모리가 필요한가요변수가 메모리에 어떻게 저장되나요 까지 해보았습니다.
- 미해결홍정모의 따라하며 배우는 C++
메모리 주소 10진수로 출력
안녕하세요 c++입문 강의를 수강하고 있는 학생입니다.강의 6:35 부근에서 array element의 주소값을 출력하기 위해 &를 입력하였고, 이렇게 되면 16진수 형태로 주소가 출력됩니다. 또한int array[num_rows][num_columns] = { {1,2,3,4,5}, // row 0 {6,7,8,9,10}, // row 1 {11,12,13,14,15}, // row 2 };로 상단에 선언된 상태입니다.10진수 형태의 주소값을 출력하기 위해 & 앞에 (int)를 붙였는데, 다음과 같은 오류가 발생합니다.[Error] cast from 'int*' to 'int' loses precision [-fpermissive]이전 강의에서도 메모리 주소를 출력하는 예제가 있었는데, 그때에도 같은 오류가 발생했었습니다.(size_t)&(array[0])(size_t)&(array[1])(size_t)&(array[2])...이렇게 (int) 대신 (size_t)를 사용하면 에러가 발생하지 않고 4byte단위로 메모리 주소가 10진수 형태로 출력되는데, (int)만 사용하면 이런 오류가 발생합니다. 원인을 알 수 있을까요?
- 해결됨홍정모의 따라하며 배우는 C++
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
#pragma once #include <bitset> template <class T> class Storage8 { private: T array_[8]; public: void set(const int& index, const T& value) { array_[index] = value; } const T& get(int index) const { return array_[index]; } }; template<> class Storage8<bool> { private: unsigned char data_; public: Storage8() :data_(0){} void set(int index, bool value) { unsigned char mask = 1 << index; // left shift std::cout <<"index bit : " << std::bitset<8>(mask) << std::endl; if (value) data_ |= mask; // flag on else data_ &= ~mask; // flag off std::cout << "After masking value : " << std::bitset<8>(data_) << std::endl; } bool get(int index) { unsigned char mask = 1 << index; return(data_ & mask) != 0; // Has data_? } };main.cpp#include <iostream> #include <array> #include "Storage8.h" using namespace std; int main() { // Define a Storage8 for integers Storage8<int> intStorage; for (int count = 0; count < 8; count++) intStorage.set(count, count); for (int count = 0; count < 8; count++) cout << intStorage.get(count) << endl; cout << "Sizeof Storage8<int> " << sizeof(Storage8<int>) << endl; // Define a Storage8 for bool Storage8<bool> boolStorage; for (int count = 0; count < 8; count++) boolStorage.set(count, count & 3); // 늘어나는 count와 3을 bitmasking for (int count = 0; count < 8; count++) cout << std::boolalpha<< boolStorage.get(count) << endl; cout << "Sizeof Storage8<bool> " << sizeof(Storage8<bool>) << endl; return 0; }이런 결과가 나왔는데요, 원문 learncpp에서는 boolStorage.set(count, count & 3); 처럼 value값에 늘어나는 count와 숫자 3을 넣었습니다. 그런데 이 원리가 어떻게 되는지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
안녕하세요 7.3 참조에 의한 인수 전달 강의 듣고 있는데 교수님이 여러가지 리턴 타입에 관한 강의가 앞쪽 강의에 있다 하시는데 찾지를 못해서요 몇번째 강의 인지 알고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C++
메모리 주소에 관한 질분
int x;x = 123;이 상황에서 &x를 출력하면 16진수로 이루어진 x의 주소를 알 수 있습니다.그런데 선생님께서 프로그래머가 123 숫자에 대한 주소를 갖고 오기가 어렵다고 하셨는데 x에 123을 대입했으니, x의 주소가 곧 123의 주소 아닌가요? 선생님께서 가져오기 어렵다고 하신 123의 주소가 뭔지 잘 모르겠습니다ㅠ
- 해결됨홍정모의 따라하며 배우는 C++
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
교수님께서는 #include <string>을 하셨는데, 모든 클래스의 reportError 매개변수에 const char* errorMessage를 넣으셨는데 이유가 무엇인가요? 아래와 같이 std::string으로 대체해서 실행시켰는데 결과는 똑같이 나왔습니다.#include <iostream> #include <string> using namespace std; class IErrorLog // 인터페이스는 앞에 I를 붙여주는 관습 { public: virtual bool reportError(std::string errorMessage) = 0; virtual ~IErrorLog(){} }; class FileErrorLog : public IErrorLog { public: bool reportError(std::string errorMessage) override { cout << "Writing error to a file" << endl; return true; } }; class ConsoleErrorLog : public IErrorLog { public: bool reportError(std::string errorMessage) override { cout << "Printing error to a console" << endl; return true; } }; void doSomething(IErrorLog& log) { log.reportError("Runtime error!!"); // 위에서 순수 가상 함수를 정의만 해도 reportError의 존재는 알고 있기 때문에 메소드호출 가능 } int main() { FileErrorLog file_log; ConsoleErrorLog console_log; doSomething(file_log); doSomething(console_log); return 0; }
- 해결됨홍정모의 따라하며 배우는 C++
형변환 오버로딩에서 const 관련 질문이 있습니다.
안녕하세요!제가 학교에서 공부하던 코드에 대해 질문이 있는데요.혹시 여기에 다른 코드 가져와서 질문을 하는게 안된다면 말씀해주시면 감사하겠습니다.이렇게 3개의 type conversion operator를 만들어서여기에 사용을 했는데요. 에러가 발견되어서 수정하다보니 type conversion operator뒤에 모두다 const를 넣거나 모두다 const를 빼면 저 오류가 사라지더라구요.수업중에 const를 가지고 overloading을 할 수 있다는 내용은 배웠었는데요. 그때는 하나는 const를 넣고 하나는 const를 안 넣으면 const의 유무에 따라 오버로딩이 된다는 내용으로 기억합니다. 그런데 이렇게 const의 유무가 모두 동일하게 들어가야지만 에러가 나지 않는 것과는 다른 것 같아서 왜 그런건지 궁금해서 질문드려요.type conversion operator를 사용할 때는 const 유무를 모두 동일하게 가져가야한다라고 이해하면 될까요?
- 미해결홍정모의 따라하며 배우는 C++
Digit 뒤에 reference를 사용하는 이유
안녕하세요.2분 10초에 prefix operator 만드실때요.Digit뒤에 &를 사용하셨잖아요.Digit&는 return type을 의미하는 것일텐데 *this는 포인터 아닌가요?이 부분이 잘 이해가 되지 않습니다.고민하다가 &를 빼봤는데 잘 작동하더라구요. 왜 &가 없어도 잘 작동이 되는걸까요?추가적으로 질문이 하나가 있는데요.코딩공부를 하다보면 반복되는 문장들이 있잖아요.이번에 배우고 있는 연산자 오버로딩들을 보면 구조가 어느정도 정해져있고 내가 필요에 따라 조금만 바꿔가며 사용하면 되는 것 같은데요.초보가 이런 부분을 공부할 때 하나하나 이해를 해가며 공부를 하는게 좋을까요? 아니면 마치 영어 문장 외우듯이 'prefix는 자기자신을 return하니까 &가 붙어야하고 postfix는 자기자신을 return하는건 아니니까 &가 없어도 돼'라고 외워버려도 괜찮을까요?모든 부분을 하나하나 이해하고 넘어가면 제일 좋겠지만 시간적으로 조금 낭비 같다는 생각도 들어서 여쭤봅니다.
- 미해결홍정모의 따라하며 배우는 C++
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결 33:55에서 초기화를 안해줘서 메모리가 할당이 안됐다는 부분이 이해가 안갑니다 초기화를 안해줘도 변수선언시 메모리영역에 쓰레기값이 할당돼서 결국 cout으로 출력을 하면 쓰레기값이라도 나와야 하는거 아닌가 라는 생각이 듭니다
- 미해결홍정모의 따라하며 배우는 C++
dat파일이...
dat파일이 C++로 작성된 프로그램과 가장 기본적으로 상호작용하는 형식으로 알면될까요? 어렵게 생각하지말고 그냥 exls파일이나 png파일 wave파일 처럼 그냥 파일로 생각해도 되죠??
- 해결됨홍정모의 따라하며 배우는 C++
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
#include <iostream> #include <cassert> #include <initializer_list> // std header file using namespace std; class IntArray { private: int length_ = 0; //unsigned int는 32비트임 int* data_ = nullptr; public: IntArray(const int& length) : length_(length) { data_ = new int[length]; } IntArray(const std::initializer_list<int>& list) : IntArray(static_cast<int>(list.size())) // list의 size만큼 위임생성자가 호출됨 { int count = 0; //count는 인덱스 기능 for (auto& element : list) // for-each구문에서는 initializer_list안의 iterator가 사용됨 { data_[count] = element; // 아래의 operator<<에서 객체 출력을 위해 ++count; } } ~IntArray() { delete[] data_; } //TODO: overload operator = IntArray& operator= (const std::initializer_list<int>& copy) { cout << "Assignment operator" << endl; length_ = copy.size(); delete[] data_; // 기존에 있던 리스트를 지움 /*if (this == copy) return *this; */ if (data_ != nullptr) { data_ = new int[length_ + 1]; // 아래의 ++count때문에 +1해줘야함 int count = 0; for (auto& e : copy) { data_[count] = e; ++count; // } } else data_ = nullptr; return *this; } friend ostream& operator<< (ostream& os, const IntArray& arr) { for (int i = 0; i < arr.length_; i++) os << arr.data_[i] << " "; os << endl; return os; } }; int main() { auto il = {2,4,6}; IntArray int_array{ 1,2,3,4,5,6,7,8,9,10 };//이니셜라이져 리스트로 인스턴스 생성 cout << int_array << endl; int_array = { 1,3,5,7,9,11 }; cout << int_array << endl; }부분 중, IntArray(const std::initializer_list<int>& list) : IntArray(static_cast<int>(list.size()))를 static_cast로 바꿨는데도 아래와 같은 오류가 나네요. 환경설정을 64비트로 하고 보통 vs 소스코드를 짜는데요 int는 32비트라서 저런 오류가 뜰 수 밖에 없다고 하네요. 혹시 해결할 방법이 없을까요??
- 해결됨홍정모의 따라하며 배우는 C++
복사 생성자 관련 질문이 있습니다.
안녕하세요.5분 50초경 설명을 보면 디버거 모드일 때는 복사생성자가 호출이 되지만 릴리즈 모드일 때는 복사생성자가 호출이 안된다고 설명을 해주셨는데요.저는 디버거 모드, 릴리즈 모드 둘 다 복사생성자가 호출이 안됩니다.이것도 디버거 모드이지만 컴파일러가 복사생성자 호출이 필요없다고 판단하고 복사생성자 호출을 하지 않은 걸까요?
- 해결됨홍정모의 따라하며 배우는 C++
수업 중 궁금한점이 있습니다.
public: char* m_data = nullptr; int m_length = 0; public: MyString(const char* source = "") ... }; int main() { MyString hello("Hello"); cout << (int*)hello.m_data << endl;수업중 코드의 일부분인데 m_data라는 문자형 포인터 변수를 동적할당해서 문자열을 받는 코드입니다. 메인함수에서 동적할당된 m_data의 주소를 찍어보려고교수님께서 (int*) 를 써서 주소를 정수화 했질문:(int) 와 (int*) 의 차이점이 무엇인가요? 다른 강의시간에 비슷한 개념을 언급해주셨는데 어느 강의에서 언급하셨는지 기억이 안나네요.
- 미해결홍정모의 따라하며 배우는 C++
라이브러리자체가 이해가 되지 않습니다.
흠.....라이브러리라는게 visual studio설치할 때 같이 딸려오는 여러 기능이나 자료를 정의해 놓은 파일인건가요??정의를 찾아보니까 API를 기반으로 대상 환경(플랫폼)에서 바로 실행될 수 있도록 모듈화된 프로그램 모음이다. 라이브러리는 혼자서 동작하는 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어의 형태로 (또는 대상 플랫폼에 따라서는 바이트코드로) 존재하는 프로그램이다 라고 는 나오는데 대상환경(플랫폼)은 visual studio이고 여기에 설치되어 있는것들일까요? 그리고 얘들이 있어야지만 #include <iostream>으로 끌어다 사용할 수 있는게 맞나요? 표준라이브러리>namespace>std 순서로 있다고 생각해도 무방할까요?
- 미해결홍정모의 따라하며 배우는 C++
마지막 예제 질문
#include <iostream>using namespace std;int main() {cout << ((true && true) || false) << endl;cout << ((false && true) || true) << endl;cout << ((false && true) || false || true) << endl;cout << ((14 > 13 || 2 > 1) && (9 > 1)) << endl;cout << !(2314123 > 2 || 123123 > 2387) << endl;return 0;} 마지막 예제에서, 위와 같이 조건식을 통째로 괄호로 싸주거나, 끝에 endl없이 출력해야 빌드가 되네요.예를들어,cout<<(true&&true)||false<<endl;은 error C2563: mismatch in formal parameter list에러가 뜹니다.cout << ((true && true) || false) << endl;또는cout << (true && true) || false;로 코딩해야 빌드가 돼요.현상만 보고 추정하기로는 endl함수가 1개의 인자만 받아야해서 그런거 같은데 맞나요?? 에러 내용이 정확히 뭔지 설명 부탁드려요
- 미해결홍정모의 따라하며 배우는 C++
증감연산자 위치에 따른 수행 순서 질문입니다.
int a = 1, b = 10;int z3, z4;z3 = (++a, a + b);cout << a << " " << b << " "<< z3 << endl;cout << endl; a = 1, b = 10;z4 = (a++, a + b);cout << a << " " << b << " " << z4 << endl;cout << endl; 증감연산자가 앞에 붙는 z3는 a증감을 먼저 수행하고, a+b 연산을 수행하고, 그 값을 z3에 대입하는 것이니 이해했는데요. 증감연산자가 뒤에 붙는 z4는 a는 그대로 있고, a+b를 수행하여 그 값을 z4에 대입하고, 그 뒤에 a증감 수행하는게 아닌가요?여전히 z4도 12가 나오네요. 증감연산자가 뒤에 붙는 경우 연산이 후순위로 되는데, 그 범위가 ;로 끝나는 라인까지라고 생각해서 지금까지 다 맞아왔는데 이 예문에서는 그게 아닌 것 같습니다. 증감 연산자 순서 범위가 정확히 어떻게 되나요?
- 해결됨홍정모의 따라하며 배우는 C++
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
Cents operator-() const { return Cents(- cents_); }저 리턴부분에서 임시객체인 Cents를 빼도 정상적으로 -가 붙어서 출력이 나오는데요. 왜 굳이 임시 객체를 통해서 반환해 줘야 하나요? 인스턴스를 만들면 this가 자동으로 호출이 되니까 Cents를 빼고 return this->(-cents_); 또는 return -cents_; 를 해줘도 멤버변수를 그대로 리턴해줄 수 있지 않나요??