상수 참조로 매개변수를 받아들일 수는 없는 건가요?
글쓴이: dltkddyd / 작성시간: 월, 2014/05/19 - 7:54오후
#include <iostream> #include <cstring> using namespace std; class Test { public: char ch; Test(char _ch):ch(_ch) { cout<<"Test(char _ch):ch(_ch)"<<endl; } }; template<typename T> class NameObject { private: Test& nameValue; T objectValue; public: NameObject(Test& name, const T& value):nameValue(name), objectValue(value) { //첫 번째 매개변수를 const로 바꾸면 컴파일 에러가 발생하네요. 이거 왜 그런거죠? //const만 붙이면 그럽니다. } Test& getNameValue() { return nameValue; } T& getObjectValue() { return objectValue; } }; int main() { Test test1('e'); NameObject<unsigned int> obj1(test1, 1); cout<<obj1.getNameValue().ch<<" "<<obj1.getObjectValue()<<endl; return 0; }
Forums:
const int a = 3; int& b =
위의 코드가 컴파일되지 않는 이유와 같습니다.
반대의 경우를 설명하고 계신대..
그런데 이 경우는 어떻게 가능할까요?
int c=5;
const int& d=c;
이 경우는 컴파일이 되는데. 매개변수에 전달되는 형식은 이와 같을텐데. 저 int를 Test로 바꾸면 똑같죠. 그런데 이 경우는 되고, Test의 경우느 되지 않습니다.
Test e='p';
const Test& f=e;
이런 경우도 됩니다.
답변주신 내용은 질문드린 내용과는 전혀 다른 경우인데요..
아! 이제야 알겠군요.
Test &g=f;
이 부분에서 걸리는군요.
그러니까 초기화리스트에서 생성자 호출시 오류가 발생하는 거였군요. 매개변수를 받아들이는 과정이 아니라요. 좀 생각좀 하게 만드시는군요. 마지막 결론 내리고 한 번 웃었습니다. 감사합니다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
생성자 호출과는 전혀 상관없습니다. C의 포인터와
생성자 호출과는 전혀 상관없습니다.
C의 포인터와 C++의 레퍼런스를 다시 공부하시는 것이 좋을 것 같습니다.
네, 그렇군요.
생성자 호출과는 상관이 없는 것이죠. 읽는 책이 있는데, 이 책 마저 읽고 기본서 한 번 다시 읽어봐야 겠습니다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
const 상수값을 변경할 수 있습니다.
질문을 보고. 책을 봤더니. 비슷한 내용이 있었습니다.
http://kldp.org/node/142898
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=83&MAEULNo=28&no=6682
참고해보세요. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기