오류, 버그, 질문 - 페이지 1920

 
fxsaber :

"상위"는 보호/개인 필드를 볼 수 없습니다.

그리고 공개 필드: 해야 합니까/ 말아야 합니까?

결합기 :

추가하면

구조체B;

영향을 미치지 않는다
 
A100 :

그리고 공개: 해야 합니까/ 말아야 합니까?

공개 정적 필드 - 필수.
 
fxsaber :
공개 정적 필드 - 필수.
요약하자면 기본 클래스는 파생 클래스의 비정적 필드를 보지 못합니다. 동시에 기본 클래스는 파생 클래스의 protected static을 보지 않지만 public static은 봅니다. 이 규칙을 스스로 생각해 냈습니까?
 
A100 :
요약하자면 기본 클래스는 파생 클래스의 비정적 필드를 보지 못합니다. 동시에 기본 클래스는 파생 클래스의 protected static을 보지 않지만 public static은 봅니다. 이 규칙을 스스로 생각해 냈습니까?

그런 일반화가 어디에서 왔는지 말하기는 어렵습니다. 나는 그것을 의미하지 않았다.

모든 클래스는 다른 클래스의 공개 정적 필드/메서드를 봅니다.

기본 클래스는 보호/비공개(정적 - 중요하지 않음) 파생 필드/메서드(공개 상속)를 보지 않습니다.

파생 클래스 (public-inheritance)는 기본 클래스의 private 필드/메서드를 절대 볼 수 없지만 항상 - protected/public을 봅니다.

 
fxsaber :

모든 클래스는 다른 클래스의 공개 정적 필드/메서드를 봅니다.

결과적으로 질문은 다음과 같이 요약됩니다. 파생 클래스의 공용 정적 필드/메서드를 기본 클래스의 MQL에서 사용할 수 있는 것이 맞습니까?
 
A100 :
결과적으로 질문은 다음과 같이 요약됩니다. 파생 클래스의 공용 정적 필드/메서드를 기본 클래스의 MQL에서 사용할 수 있는 것이 맞습니까?

이는 기본/파생 사례뿐만 아니라 일반적으로 모든 클래스에 해당됩니다.

 
fxsaber :

이는 기본/파생 사례뿐만 아니라 일반적으로 모든 클래스에 해당됩니다.

질문은 갑자기 생겨난 것이 아닙니다.

 #ifdef __cplusplus
struct B;
struct A {
         int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
따라서 자세한 검사가 필요합니다.
 
fxsaber :

모든 클래스는 다른 클래스의 공개 정적 필드/메서드를 봅니다.

... 포함 베이스. 이것은 MQL에서 다음과 같은 모순을 야기합니다.

 struct A {
         static int i;
};
int A::i;
struct B : private A {};
struct C : B {
        C() { Print ( A::i ); } //error: 'i' - private member access error
};
C++ 오류 없음
 
A100 :

C++에서 기본적으로 구조체의 멤버는 공개이고 mql에서는 클래스와 마찬가지로 비공개입니다.

예, 틀렸습니다. C++의 전방 선언으로는 충분하지 않습니다. 정의가 필요합니다.

 
A100 :

... 포함 베이스. 이것은 MQL에서 다음과 같은 모순을 야기합니다.

C++ 오류 없음

예, 이것은 MQL 개인 상속 버그입니다.