강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của diskline124278
diskline124278

câu hỏi đã được viết

C++ Học Theo và Thực Hành của Hong Jeong Mo

8.4 Danh sách khởi tạo thành viên hàm tạo

따라하는 중에 클래스 B에 있는데 m_b값을 출력하고 싶은데...안되네요ㅠㅠ

Viết

·

262

0

'''

include

include

using namespace std;

class B

{

int m_b;

public:

B(const int& m_b_in)

: m_b(m_b_in)

{}

void print()

{

cout << m_b << endl;

}

};

class Something

{

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)

{

m_i = 4;

m_d = 5;

m_c += 10;

}

void print()

{

cout << m_i << " " << m_d << " " << m_c << endl;

//cout << << m_i << " " << m_d << " " << m_c << " " << m_b.print() << endl;

//(이렇게도 해봤는데 이러한 피연산자와 일치하는 "<<"연산자가 없습니다. 라고 뜹니다ㅠㅠ)

for (auto &ele : m_arr)

cout << ele << " ";

cout << endl;

}

};

int main()

{

Something som;

som.print();

B bb; //B클래스의 기본 생성자가 없습니다.

bb.print();

system("pause");

return 0;

}

'''

B bb;로 클래스 B형식의 인스턴스 bb를 만들었는데 "B클래스의 기본 생성자가 없습니다.' 라는 에러메세지가 뜹니다. B클래스의 생성자가

B(const int& m_b_in)

: m_b(m_b_in)

{}

이거 아닌가요??

C++

Câu trả lời 5

1

B bb; //B클래스의 기본 생성자가 없습니다.

이렇게 선언하면 기본 생성자를 이용하여 instance 를 만든다는 뜻입니다.

따로 대입을 안해준다면 내부 멤버 변수에는 쓰레기 값이 들어 있겠죠 

하지만, 현재 코드에 B class 에 기본 생성자가 들어 있지 않기 때문에 오류가 나는것 입니다. 

B class에 기본생성자를 추가 하시거나, B class 처음 만드실때 작성하신 생성자에 맞게 int값을 넣어 주셔 할것 같습니다.

//cout << << m_i << " " << m_d << " " << m_c << " " << m_b.print() << endl;

//(이렇게도 해봤는데 이러한 피연산자와 일치하는 "<<"연산자가 없습니다. 라고 뜹니다ㅠㅠ)

이 코드에서 m_b.print() 즉 B class의 print()함수는 리턴값이 없는 void 형 함수 이기때문에 cout 으로 출력 해줄게 없기 때문에 오류가 나는것 입니다.

m_b의 멤버를 보고싶으신거라면 

다음 줄에서 m_b.print()를 호출 해주셔야 합니다.

0

혹시 이 질문 대한 답 혹시 설명해 주실 수 있나요..? 저도 질문자님이랑 같은 상황인데 답변들을 읽어도 해결이 안 되네요...ㅠㅠ

0

B클래스의 멤버변수 m_b가 private로 선언되어있네요. Something 클래스에서 B클래스의 객체를 만들어도 접근은 하지 못합니다. 저도 값이 출력되는지 궁금해서 m_b만 넣으니까 님과 동일한 에러가 발생했네요. 저는 m_b 변수를 private로 유지한채로 set,get함수를 통해서 출력했습니다. 기본생성자 에러는 B(const int& m_b_in)
: m_b(m_b_in)
{} 이 생성자에 내용을 채워보시는 건 어떨까요

0

sangeun park님의 프로필 이미지
sangeun park
Người đặt câu hỏi

앗 죄송합니다ㅠㅠ 인사도 안드리고 다짜고짜 질문부터 드렸네요ㅠㅠ 안녕하세요!!

선생님께서 보시기에도 제가 짠 코드대로 했을 때 문제없이 m_b의 값이 나와야 하는건가요?

저는 아무리 봐도 뭐가 문제인지 잘 모르겠습니다ㅠㅠ 전에 비슷한 문제가 나왔을때는 관련된 헤더를 인클루드하지 않아서 생긴거였는데.... 이건 뭘 인클루드하지 않아서 생긴건지도 모르겠습니다.

0

honglab님의 프로필 이미지
honglab
Người chia sẻ kiến thức

안녕하세요? 저것도 생성자는 맞습니다만, '기본 생성자'는 뭘까요?

Hình ảnh hồ sơ của diskline124278
diskline124278

câu hỏi đã được viết

Đặt câu hỏi