문제

이 하나는 나를 괴롭 히고 있습니다. 내가하려는 것은 래퍼 클래스에서 래퍼 클래스를 사용하는 다른 클래스의 구조물의 변수 설정이 실제로 랩퍼 클래스를 사용하는 다른 클래스의 변수 설정을 수행하도록 래퍼 클래스의 구조체 개체를 가리 키도록 래퍼 클래스에서 참조 변수를 가져옵니다. 래핑 된 클래스는 래퍼 클래스가 아닙니다. 이렇게하려면

와 같은 래핑 클래스의 랩 클래스의 구조체에 대한 랩 클래스의 참조를 단순히 만들려고했습니다.
class CClassWrap
{
    CClass::plot_type& PlotArgs;  
}  
.

및 init plotargs

CClassWrap::InitWrap( CClass AppIfx )
{
    PlotArgs = AppIfx.PlotArgs;
}
.

나는 플로라가 래핑 된 클래스 'plotargs를 가리키고 싶다.

class StudiesBase:public CClassWrap
{
   //12 should show up in CClass because PlotArgs in CClassWrap points to the PlotArgs on CClass.
   PlotArgs.value = 12;

 }
.

12는 래핑 된 클래스 버전의 plotargs에 나타납니다. 이렇게하려면 다음과 같이 .h 파일에 정의 된 참조를 설정했습니다.

#include "CClass.h"

class CClassWrap
{
 //PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
 CClass::plot_type& PlotArgs;  
}
.

CClassWrap은 다른 클래스에서 상속되며 IT Studiesbase

을 호출합니다.
class StudiesBase:: public CClassWrap
{
     etc...
}
.

컴파일 될 때 CCLASSWRAP에 대한 기본 ctor가 없음을 나타내는 오류가 주어집니다. 그래서 ctor

를 추가합니다

cclasswrap은

처럼 보이게합니다.
class CClassWrap
{
public:
      CClassWrap();
public:
     //PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
     CClass::plot_type& PlotArgs;  
}
.

이것은 Plotargs가 initlized가 아니라는 오류 C2758을 생성합니다.

그래서 ctor에서 ctor에서 init을 init하려고합니다.

PlotArgs = AppIfx.PlotArgs;
.

여기서 APPIFX가 런타임에 CCLASS 객체의 포인터로 설정됩니다. 컴파일러는 생성자 기본 / 멤버 이니셜 라이저 목록 등에서 C2758 변수가 오류가 발생하지 않아야합니다 ...

내가하는 일을하는 일을하는 것처럼 보이는 것처럼 보이는 경우 확실히 사실이 될 것입니다! 어떤 도움이 필요할 것입니다.

도움이 되었습니까?

해결책

이것은 당신이 잘못된 곳입니다

CClassWrap::InitWrap( CClass AppIfx )
{
    PlotArgs = AppIfx.PlotArgs;
}
.

참조를 리 바인드 할 수 없습니다.일단 참조가 뭔가를 지칭하면 다른 것을 지칭하도록 만들 수 없습니다.이 코드 (실행 한 경우)는 AppIfx.PlotArgs를 참조하는 모든 PlotArgs를 할당 할 것입니다.

이 코드를 생성자

로 이동해야합니다.
CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
.

뿐만 아니라이 생성자 코드는 CClass 오브젝트를 복사하므로 CClass 복사 생성자가 작동하는 방식에 따라 복사 된 plotargs 객체를 참조하는 것으로 예상되는 것을 수행하지 못할 수도 있습니다.그래서 여기서 참조를 사용하는 것이 좋습니다

CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top