월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
6.8 포인터 질문
struct MyStruct { int array[5]={9,7,5,3,1}; }; void doSomething(MyStruct * ms) { cout<<sizeof((*ms).array)<<endl;//20 } int main() { MyStruct ms; cout<<ms.array[0]<<endl; cout<<sizeof(ms.array)<<endl; doSomething(&ms) } 여기서 cout<<sizeof((*ms).array) 이부분의 *는 de-reference 를 뜻하는건가요 아님 포인터를 뜻하는건가요?
- 미해결홍정모의 따라하며 배우는 C++
19:23초에 Second sec 에서 이거 왜 ..아주기초
자꾸 뒷 내용을 들으면 앞에를 까먹고 ㅠㅠ 19:23초에 Second sec; 여기 쓰시는데 sec이런거가 의미하는게 도대체 뭔가요 ㅠㅠ Second클래스 쓰고 이런거 까지는 이해가 가는데,, 도와주세요 넘 기초인거 같은데 ㅜㅜㅜ 모르겠어요
- 미해결홍정모의 따라하며 배우는 C++
정렬코딩을 짜봤는데 정렬이 안됩니다 어디가 잘못되었는지 봐주세요 ㅠㅠ
using namespace std; void printArray(int array[], int length) { for (int i = 0;i < length;i++) { cout << array[i] << " "; } cout << endl; } int main() { const int length = 5; int ij = 0; int a[length] = { 3,5,2,1,4 }; //swap //int temp = int[0]; //int[0] = int[1]; //int[1] = int temp; printArray(a, length); for (int i = 0;i < length-1;i++) { for (int j = i + 1;j < length;j++) { if (a[i] > a[j]) ij = a[j]; a[j] = a[i]; a[i] = ij; } } printArray(a, length); } 이렇게 하면 정렬이 될꺼라 생각했는데 계속 안되네요 어디가 잘못된건가요?
- 미해결홍정모의 따라하며 배우는 C++
에러 질문
안녕하세요 교수님! 연습해보느라고 프로젝트를 하나 만들었는데 오류가 나는데 왜 나는지 모르겠어서 질문 드려요 .cpp 파일 2개( 메인 포함) .h 파일 1개로 이루어진 프로젝트입니다. 오류 코드는 이렇게 나옵니다 2군데 예요. 1>------ Build started: Project: Project1, Configuration: Release Win32 ------ 1>MSVCRT.lib(exe_main.obj) : error LNK2001: unresolved external symbol _main 1>D:\UUUU\CSCSC)\Library\CSCSCpractice\Release\Project1.exe : fatal error LNK1120: 1 unresolved externals 1>Done building project "Project1.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
- 미해결홍정모의 따라하며 배우는 C++
copy constructor에 대한 질문입니다.
안녕하세요 먼저 항상 좋은 강의에 감사드립니다. 강의 중에 Copy constructor에 대한 개념이 나오게 되는데, 이게 기본적으로 숨어져있다고 설명해주셨습니다. 앞에서 위임생성자나 함수 overload를 봤을 때, 생성자 함수가 overload된 형태라고 이해하였는데, ( 클래스의 instance를 생성할 때는 일반적인 생성자 함수가 호출되고, 클래스 타입의 변수를 함수의 인자로 사용할 때는 클래스를 인자로 받는 overlaod 된 생성자 함수를 호출 한다고 생각했습니다.) 제가 비 전공자라 주변에 물어볼 사람도 없고.. 올바르게 이해를 하고 있는건지 궁금해서 이렇게 질문 드리게 됩니다.이게 제가 개념적으로 맞게 접근한건지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C++
bona kim님과 같은 질문입니다~!
Q)어떠한 이유로 main()의 첫 doSomething(); 유무에 따라 에러가 발생하는 건가요? 본 코드는 영상 (9:50)와 동일합니다. 단, main() 첫 줄에 doSomething()을 호출한 것만 다릅니다. class Exception { public: void report() { cerr << "Exception report" << endl; } }; class ArrayException : public Exception { public: void report() { cerr << "Array exception" << endl; } }; class MyArray { private: int m_data[5]; public: int& operator [] (int index) { if (index < 0 || index >= 5) throw ArrayException(); return m_data[index]; } }; void doSomething() { MyArray my_array; try { my_array[100]; } catch (ArrayException& e) { cout << "doSomething() " << endl; throw e; // error break out!! } } int main() { doSomething(); // only this line is different from before!! try { doSomething(); } catch (ArrayException& e) { cout << "main()" << endl; e.report(); } return 0; } 위 코드는 사실상 doSomething에서 특정 대상을 throw할 필요없이 그냥 throw해도 main()의 catch가 받아줘야 하는 코드라고 생각해요. test) throw e; vs throw; = 기능상 결과 똑같음(위 코드에 한에서만). throw와 catch 순서 상 : class MyArray (throw) -> void doSomething (catch & throw) -> main (catch) 그런데 자꾸 런타임 에러가 발생합니다. 아래 사진, 또는 Unhandled exception 에러 발생. (디버깅)본 에러는 doSomething의 throw이 작동하는 순간 발생합니다. 신기하게도 main()의 가장 첫 번째 doSomething();을 지워주면 이러한 문제가 발생하지 않고, 함수 doSomething안에 있는 throw도 main()의 catch까지 문제없이 전달됩니다.
- 미해결홍정모의 따라하며 배우는 C++
cin.clear() 와 cin.ignore 의 질문
cin.clear(); 와 cin.ignore()의 역활이 뭔가요? 그리고 왜 선생님께선 같이 쓰신건가요?
- 미해결홍정모의 따라하며 배우는 C++
5.10 강의 질문
int main() { cout << "Enter an integer number : "; int x; cin >> x; //cin.fail() if (cin.fail()) { cin.clear(); cin.ignore(32767, '/n'); cout << "try again" << endl; } else { cin.ignore(32767, '\n'); cout << x << endl; } } 이렇게 했을떄 99999999999999같은 범위를 초과하는 숫자를 넣었을때 왜 try again은 안뜨는 것이고 왜 console창에 press enter key.... 이런게 안뜨고 계속 가능건가요?
- 미해결홍정모의 따라하며 배우는 C++
0.4.0 질문
#include <iostream> int main(){return 0; } 이 코드 빌드솔루션을 했는데 교수님처럼 깔끔하게 안 뜨고 MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 1>C:\Users\myoo0\source\repos\Project1\Debug\Project1.exe : fatal error LNK1120: 1 unresolved externals 1>Done building project "Project1.vcxproj" -- FAILED. 이렇게 에러코드가 뜹니다 ㅠㅠ 제 프로젝트 이름은 project1 이예요
- 해결됨홍정모의 따라하며 배우는 C++
매크로 상수 정의
매크로를 사용해서 상수를 정의해도, 강의에서 나온 것 처럼 헤더파일을 이용하면, 필요한 파일에서만 적용 할 수 있으니, 큰 무리 없지 않을까요? 상수라고 할떄는 수정이 불가능 하다는 뜻으로 사용 할 수도 있지만, 절대 불변의 상수 (중력 가속도 같은 혹은 수학적 상수나 스탠다드로 정해져 있는 숫자들.. 바이트가 8 비트라는 등등의) 경우도 있는데, 후자의 경우는 헤더 파일에 매크로로 상수를 정의한 다음에, 필요한 파일에만 include 하는 방법으로 사용해도 괜찮지 않을까 하는 생각이 드는데... 이것도 권장할 만한 방법은 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
강의 29분 30초 구현에 대해 질문드립니다.
강의 29분 30초에 주문하신 기능을 구현하고자 많은 고민을 해 보았습니다. 우선 상대방에게 제 메세지를 보내고 getline(cin, message); stream <<message; stream << std::endl; 그동안 상대방이 보낸 메세지를 모아서 아래와 같이 한꺼번에 출력 하고자 했습니다. while (stream) { std::getline(stream, line); stringstream << line; } std::cout << stringstream.rdbuf()<<std::endl; 그런데 문제는 while문이 무한 반복된다는 것이었습니다. stream에 상대방이 보낸메세지가 더 없다는 것을 확인하는 것은 어떻게 구현할 수 있을까요? 귀한 조언 부탁드립니다. 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C++
endl 없이도 자동개행?
안녕하세요 질문드립니다 원래 endl을 이용해서 개행을 하는건데,, 자동으로 개행이 되네요? 지금 올린 사진은 개행이 두 번 되있고, endl을 이용하지 않고 돌리면 개행이 한 번 되있는 걸로 나옵니다 뭔가 설정이 다르거나 한 것 같은데 무엇이 문제일까요?
- 해결됨홍정모의 따라하며 배우는 C++
0.4 0,1,2강의 전반적으로 이해에 관해
안녕하세요 질문올립니다 비쥬얼스튜디오가 너무 편하고,그대로 이용하면 내부구조를 모를 수 있기에 파일생성원리에 대해 가르쳐주셨습니다만,. 솔직히 복잡해서 어렵습니다. (내용이, 교수님은 잘가르쳐주시지만..)세세하게 가르쳐주시기때문에 좀 더 시간을 들여 여러번 강의를 듣고 여러번 직접 파악해야 되겠지만.. 너무 앞부분을 잡고 있는것 같아 고민입니다.(2번 강의듣고 2번 생성 원리에 대해 파악하는 중) 그냥 쭉 진도 나가는게 좋을까요?아니면 완벽하게 내부구조를 이해하는게 좋을까요?
- 해결됨홍정모의 따라하며 배우는 C++
namespace 사용 관련 질문 드립니다.
안녕하세요. 강의에 나온 대로 코드를 조금 변형해서 짜는 중인데 namespace에 걸린 함수를 어떻게 불러오느냐에 따라 값이 달라서 궁금해서 질문드립니다. #include <iostream> using namespace std; namespace work1 { int a = 1; int doSomething() { a += 3; return a; } } namespace work2 { int a = 2; int doSomething() { a += 5; return a; } } int main() { cout << "<First Try> \nwork1_a: " << work1::a << endl; cout << "\nwork2_a: " << work2::a << endl; cout << "\nwork1_doSomething: " << work1::doSomething << endl; cout << "\nwork2_doSomething: " << work2::doSomething << endl; cout << "\nwork1_doSomething(): " << work1::doSomething() << endl; cout << "\nwork2_doSomething(): " << work2::doSomething() << endl; work1::a; work1::doSomething; work2::a; work2::doSomething; cout << "\n<Second Try> \nwork1_a: " << work1::a << endl; cout << "\nwork2_a: " << work2::a << endl; cout << "\nwork1_doSomething: " << work1::doSomething << endl; cout << "\nwork2_doSomething: " << work2::doSomething << endl; cout << "\nwork1_doSomething(): " << work1::doSomething() << endl; cout << "\nwork2_doSomething(): " << work2::doSomething() << endl; return 0; } 이걸 출력하면 <First Try> work1_a: 1 work2_a: 2 work1_doSomething: 0056107D work2_doSomething: 00561145 <Second Try> work1_a: 4 work2_a: 7 work1_doSomething: 0056107D work2_doSomething: 00561145 work1_doSomething(): 7 work2_doSomething(): 12 이렇게 나옵니다. doSomething에서 ()를 붙이지 않은 경우에는 16진수로 나오고, 코드를 돌릴 때마다 계속 바뀌던데 이거는 주소값 인가요? 그게 아니라면 왜 이렇게 나오는 지 궁금합니다. 그리고 second try에서는 work1_a와 work2_a의 값이 4와 7이 되어서 doSomething()의 값도 7과 12로 변하는데, 이는 First try에서 cout << work1::doSomething() << endl; cout << work2::doSomething() << endl; 을 하면서 a의 값이 4와 7로 변했기 때문인 것으로 보입니다. 그런데 main 함수 내에서 work1::a; work1::doSomething; work2::a; work2::doSomething; 을 쓰고 second try 이하를 출력하나, 이를 빼고 바로 second try 이하 부분을 출력하나 같은 결과(a값이 각각 4와 7)인데, 그렇다면 메인 함수에서 단순히 work1::a; work1::doSomething;을 쓸 때에는 어떤 효과를 가지게 되나요? 메인 함수 내에서 work1::doSomething; 을 쓴다면 일종의 정의(definition)가 되는 것이고, work1:doSomething()을 하면 그때부터 함수를 사용하는 것이라고 봐도 될까요?
- 미해결홍정모의 따라하며 배우는 C++
질문드려요
안녕하세요. 질문드려요 char i; cin >> i; printCharacterClassification(i); char 타입으로 입력받았을 경우에는 의도한 대로 printCharacterClassification(i)을 통해서 의도한대로 검증이 이루어지는데, 왜 int타입으로 입력받을 경우에는 isalnum결과가 false가 되나요? int i; cin >> i; printCharacterClassification(i); 으로 작성해서 숫자를 입력해줄경우 isalnum false 출력되는데 char 타입으로 숫자를 넣어주면 isalnum ture로 출력되거든요. 혹시 왜 이런 차이가 나는지 알 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
헤더에 선언한 클래스로 메인함수에서 생성하였을 때 값 전달에 관한 질문
안녕하세요. 헤더에 선언한 클래스로 메인함수에서 생성하였을 때 값 전달에 관한 질문입니다. main 함수에서 header에 있는 클래스 배열을 생성하는데 값이 전달이 안됩니다. 주소를 확인해 보니 class안에서 작동될 떄의 배열과 main 함수에서 생성한 배열의 메모리 주소가 다릅니다. 헤더에 있는 클래스를 이용하고, main 함수에서 생성자를 사용하여 새로운 2차원 배열을 만들려고 하는데 어떻게 해야 값이 전달되는지 모르겠습니다. 혹시 제가 놓치고 있는 근본적인 실수가 있을까 하여 코드 전문을 첨부합니다. 바쁘신데 읽어주셔서 정말 감사합니다 :) //아래로 헤더 #pragma once #include <iostream> using namespace std; class Matrix { private: int** m_arr; int m_size = 0; public: Matrix(const int input_size) { m_size = input_size; int** m_arr = new int* [input_size]; for (int i = 0; i < input_size; i++) { m_arr[i] = new int[input_size]; } cout << "클래스 안 주소 값 삽입 전 " << m_arr << endl; cout << "enter the element " << endl; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { m_arr[i][j] = 0; cout << m_arr[i][j]<<" " << endl; } } for (int i = 0; i < input_size; i++) { for(int j = 0; j < input_size; j++) { int temp = 0; cin >> temp; m_arr[i][j]=temp; cout << "클래스 안 주소 " <<m_arr << endl; } } cout << "생성 완료 " << endl; } int mul(int** arr1, int** arr2, int input_size) { int** mul_arr = nullptr; mul_arr = new int* [input_size]; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { for (int k = 0; k < input_size; k++) { mul_arr[i][j] = arr1[i][k] + arr2[k][j]; } } } cout << "행렬의 곱 : " << endl; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { cout << mul_arr[i][j] << " "; } cout << endl; } }; void mat_print() { cout << "행렬 출력" << endl; for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { cout << this->m_arr[i][j] << " "; } cout << endl; } } }; // 아래로 cpp #include <iostream> #include "tools.h" int main() { int size = 0; cout << " enter the matirx_A size, n x n " << endl; cin >> size; //입력 받은 사이즈에 맞추어 행렬 생성 Matrix arr_A(size); cout << "클래스 밖 주소 " << &arr_A << endl; Matrix arr_B(size); arr_A.mat_print(); // Matrix mul(arr_A,arr_B,size_a); return 0; }
- 미해결홍정모의 따라하며 배우는 C++
abort() has been called
csv 파일을 불러와서 배열에 대입하는 코드를 짜 보았습니다. 그 과정에서 다음과 같은 에러가 발생하였는데 그 원인을 찾지 못하겠습니다. #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> using namespace std; void readCSV(istream& input, vector< vector<string> >& output) { string csvLine; while (getline(input, csvLine)) { istringstream csvStream(csvLine); vector<string> csvColumn; string csvElement; while (getline(csvStream, csvElement, ',')) { csvColumn.push_back(csvElement); } output.push_back(csvColumn); } } void Maketxtfile(const string filename, const int num_start, const int num_end, const int col_start, const int col_end, vector< vector<double> >& matrix) { /*메트릭스 선언 할 때 형식 int col_size; int num_size; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; vector< vector<double> > matrix(num_size, vector<double>(col_size)); */ int data_number{ 0 }; int data_size{ 0 }; int col_size{ 0 }; int num_size{ 0 }; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; string a; fstream file(filename, ios::in); double b; if (!file.is_open()) { cout << "File not found!\n"; } typedef vector< vector<string> > csvVector; csvVector csvData; vector<double> array; readCSV(file, csvData); file.close(); for (csvVector::iterator i = csvData.begin() + num_start - 1; i != csvData.end(); ++i) { for (vector<string>::iterator j = i->begin() + col_start - 1; j != i->end(); ++j) { a = *j; b = stod(a); array.push_back(b); } } data_number = size(array); //data_number = sizeof(array) / sizeof(array[0]); int i = -1; int j = 0; for (int k = 0; k < data_number; k++) { j = k % col_size; if ((k % col_size) == 0) { i++; } matrix[i][j] = array[k]; } } int main() { int num_start{ 0 }, num_end{ 0 }, col_start{ 0 }, col_end{ 0 }, col_size{ 0 }, num_size{ 0 }; string filename = "R410A_PT_D_vapor.csv"; num_start = 6; num_end = 99; col_start = 2; col_end = 125; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; vector< vector<double> > matrix(num_size, vector<double>(col_size)); Maketxtfile(filename, num_start, num_end, col_start, col_end, matrix); cout << matrix[0][19] << endl; cout << matrix[1][19] << endl; cout << matrix[num_size - 1][19] << endl; } 읽는 엑셀 파일은 다음과 같이 생겼습니다. 코드상에 문제가 있는 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
원소 하나를 push했는데 capacity가 2만큼 늘어났습니다.
int main() { vector<int> v; //push v.push_back(1); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.push_back(2); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.push_back(3); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; //pop v.pop_back(); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.pop_back(); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; return 0; } 첨부한 코드와 같이 reserve를 하지 않고 size와 capacity의 변화를 보고자 프로그램을 짰습니다. 예상대로 push를 할 때는 size와 capacity가 함께 커졌고, pop을 할 때는 size는 작아졌으나 capacity는 그대로였습니다. 그러나, 다음의 결과값을 보면 알 수 있듯이 결과값 /* 1 1 1 1 2 2 2 1 2 3 3 4 1 2 2 4 1 1 4 */ 예외적으로 3을 push한 이후 갑자기 capacity가 2만큼 늘어났습니다. 왜 이런 일이 발생하게 되는 건가요? (vector 초기화는 제vscode 버전이 uniform initialization을 지원하지 않아 저렇게 했습니다!)
- 미해결홍정모의 따라하며 배우는 C++
string에서 null char 관련
string my_str_(""); cout << std::boolalpha; cout << my_str_.empty() << endl; cout << (int)my_str_[0] << endl; // 0 출력 수업중에 사용된 코드에서 마지막에 null char가 있는지 확인하려고 (int)my_str_[0]을 출력해보았는데, 0이 출력되었습니다. 수업 중에 교수님께서 string에서는 null char를 절대 포함하지 않는다고 하셨고 분명히 my_str_.empty()에서 확인한것처럼 메모리가 비어있는데, 왜 (int)my_str_[0] 에 접근이 가능하고 0으로 값이 출력되는 건가요?
- 해결됨홍정모의 따라하며 배우는 C++
#define의 효력이 미치는 범위와 관련해서 질문 있습니다.
#define LIKE_APPLE #include "different_source.h" 이 순서대로 코드를 작성하니 "Apple"이 출력되었습니다. 그러면 강의에서 "Orange"가 출력된 것은 LIKE_APPLE의 정의가 헤더파일을 포함시키는 부분 뒤에 있기 때문이 아닌가요? 이 경우에는 LIKE_APPLE의 정의가 그 아래에 포함된 헤더파일에 영향을 미친다고 할 수 있지 않나요? (윈도우, mingw64, vs code 사용중입니다)