내가 클래스 "MyClass에"이 가정하자 -는 다음과 같이C++ : 오버로드 된 생성자를 가진 클래스의 객체의 배열
class myclass
{
public:
int n;
myclass(int n=0)
{
this->n=n;
}
myclass(myclass &a)
{
this->n=a.n;
}
~myclass()
{
cout<<n<<"\n";
}
};
지금 난 "MyClass에"의 객체의 배열을 만들려면 : -
나는이 작업을 수행 할 때int main()
{
myclass arr[]= {5}; // Only 1 element for simplicity...
}
는하지만, 나는 다음과 같은 오류를 얻을 : - 기능에서
'INT 주() :
| 47 | 오류 : 일치 쿵푸 호출에 nction 'MyClass에 :: MyClass에 (MyClass에)'
가 | 47 | 주 : 후보는 다음과 같습니다
| 36 | | 주 : MyClass에 :: MyClass에 (MyClass에 &)
| 36 | 주 : 인수에 대해 알려진 변환 1 'MyClass에'에서까지 'MyClass에 &'
| 32 | | 주 : MyClass에 :: MyClass에 (INT)
| 32 | | 주 : 'INT'에서 'MyClass에'
에서 인수 1 알려진 변환 하지만 복사 생성자 myclass(myclass &a)
을 클래스에서 제거하면 오류가 발생하지 않고 모든 것이 잘 작동합니다.
그럼 내 질문은 - :
1)입니다. 왜 이런 일이 일어 납니까 ?? myclass(int n=0)
이 여기에 복사 생성자보다 더 일치하지 않습니까 ??
2). 어떻게 성공적으로 그것을 컴파일, 둘 다, 복사 생성자뿐만 아니라 내 클래스의 정수 생성자를 고려 고려 ??
참고 : 나는 우분투 13.04에 GCC 버전 4.7.3을 사용하고 복사 생성자 수정의 참조 인수에이 문제를 const
추가
복사 생성자가'const myclass & a'을 가져야하지 않습니까? – nvoigt
@novigt 두 가지 모두 합법적이며 복사 생성자가 비 const 참조를 취하는 경우는 드뭅니다 (예 :'std :: auto_ptr').하지만 일반적으로 : 임시 참조 (const ref가 필요함)를 복사 할 수 있기를 원하고, 복사중인 객체를 수정하지 않습니다 (그래서 const ref를 사용할 수 있습니다). –