이 클래스를 컴파일 할 때 왜이 오류가 발생하는지 누가 알 수 있습니까?'이'포인터를 클래스로 변환 할 수 없습니다.
4
A
답변
11
C :: func() 메서드는 개체를 수정하지 않는다고 약속하지 않으며 인수를 수정하지 않는다고 약속합니다. 수정 :
void func(const C &obj) const
{
// don't change any this members or the compiler complains
}
또는 정적 기능으로 만듭니다. 어떤 확실한 소리는 C 객체를 인자로 취할 때와 같아야합니다.
2
const 오브젝트에서 호출 할 때 C::func(const C &obj)
을 const로 표시해야합니다. 올바른 서명은 다음과 같을 것이다 :
void func(const C& obj) const
1
문제는 func2()
에 당신이 CONST 개체를 사용하여 const가 아닌 함수 (C::func()
)를 호출하고 있다는 점이다.
변경 C::func()
의 서명 :
void func(const C &obj) const
{
// whatever...
}
그것은 const를 객체로 호출 할 수 있습니다 그래서.
1
때문에 :
this
현재 OBJ에 const를 포인터이다.
class C
{
public:
void func(const C &obj) const
{
//body
}
private:
int x;
};
void func2(const C &obj)
{
obj.func(obj);
}
int main() {
return 0;
}
또는
이이 같은 이 포인터의 const와 제거 할 수 있습니다 :
따라서 당신은 FUNC가 const를 할 수 있도록 할 수 있습니다
class C
{
public:
void func(const C &obj)
{
//body
}
private:
int x;
};
void func2(const C &obj)
{
(const_cast<C &>(obj)).func(obj);
}
int main() {
return 0;
}
희망을 그 도움이됩니다.
관련 문제
- 1. 클래스 java.lang.String 클래스의 서버를 org.richfaces.PanelMenuMode 클래스로 변환 할 수 없습니다.
- 2. C# Winforms DatagridviewCombobox 예외 문자열을 클래스로 변환 할 수 없습니다.
- 3. 파생 클래스를 기본 클래스로 변환 할 수 없습니다.
- 4. "값" '변환 할 수 없습니다. "
- 5. VB.net으로 변환 할 수 없습니다
- 6. WCFDataService 변환 할 수 없습니다.
- 7. 문자열을 클래스로 변환
- 8. 추상 클래스로 변환 할 수있는 이유
- 9. 사용자 정의 사용자 클래스로 변환
- 10. 'VerticalAllignment'특성에서 'Top'문자열을 변환 할 수 없습니다.
- 11. 형식 'WpfA.DataClass.tblGroup'을 'WpfA.Group'으로 변환 할 수 없습니다.
- 12. SharpPcap.RawCapture에서 PacketDotNet.Packet으로 변환 할 수 없습니다.
- 13. 변환 할 수 없습니다 HttpFileCollectionBase HttpFileCollection
- 14. define : org.w3c.dom.domElement를 boolean으로 변환 할 수 없습니다.
- 15. 'System.Windows.Forms.WebBrowser'에서 'ExtendedWebBrowser'로 변환 할 수 없습니다
- 16. 'TemplateError'에게 문자열을 정수로 변환 할 수 없습니다.
- 17. 사실을 문자열로 변환 할 수 없습니다.
- 18. WCF에서 동일한 유형으로 변환 할 수 없습니다
- 19. CS0030 : 'MasterPage'를 'ASP.masterpage_master'로 변환 할 수 없습니다.
- 20. Nan을 Java.lang.long으로 변환 할 수 없습니다.
- 21. myISAM을 innodb로 변환 할 수 없습니다
- 22. java.awt.image를 int [] [] []로 변환 할 수 없습니다.
- 23. 이 포인터를 변환 할 수 없습니다.
- 24. java.lang.Long은 java.lang.String으로 변환 할 수 없습니다.
- 25. 암시 적으로 형식을 변환 할 수 없습니다
- 26. 은에 'INT'에서 변환 할 수 없습니다 'INT *'
- 27. 이미지를 바이트로 변환 할 수 없습니다. [] C#
- 28. System.Object [] 오류를 변환 할 수 없습니다.
- 29. XSLT를 사용하여 올바르게 변환 할 수 없습니다.
- 30. "DESC"문자열에서 'Double'유형으로 변환 할 수 없습니다.
좋은 답변입니다. 점을 더 명확하게하려고 노력한다 :'func2'는'const C '(즉'const C'에 대한 참조)를 취하기 때문에 함수가이 객체 인스턴스를 수정할 수 없다는 것을 의미한다. 이 제약 조건은 호출 된 멤버 함수'C :: func'에 전달됩니다. 객체 인스턴스를 수정하지 않아야합니다. 따라서 선언에 필요한'const'. – stakx
그래, 왜 C &로 변환 할 수 없다고 말하는거야? – Drew
큰 오류 메시지는 아닙니다. 내 컴파일러는 "이 '포인터를'const C '에서'C & '로 변환 할 수 없다고 말합니다. 어떤 상을 수상하지는 못하지만 const의 정확성 문제가 문제임을 분명히합니다. –