class A {}; class B { public : staticint k; }; int B::k = 0 ; #define MACRO( classC, classB ) \ class classC : public classB { \ public : \ classC( A *aa ) : a( aa ) {} \ //(1) A *a; \ //(2) int f( int i ); \ }; \ int classC::f( int i ) \ { \ classB::k = i; \ //error: '::' - open parenthesis expected int j = classB::k; \ //нормально return j; \ } MACRO( C, B )
그리고 예를 들어 (1)과 (2) 행을 삭제하면 오류가 발생하지 않습니다. 그들이 무엇을 잘못했습니까!?
{
const int a;
A() : a( this .f()) {}
int f() { return ( 0 ); }
};
아니면 더 간단하게
{
const int a;
A() : a( this .f()) {}
int f() { return ( 0 ); }
};
Ilyas :
Почему список инициализации Вы не включаете в тело?
왜냐하면 const int; 그렇지 않으면 가능하지 않습니까?
비유적으로 말해서 클래스 객체 ( this 포함)는 ':' 기호로 초기화됩니다.
남. 모더레이터 여러분, 마켓에서 유료로 제공되는 제품(지표)을 무료로 하면 금지의 두려움 없이 포럼에서 공개적으로 작품을 공개하고 토론할 수 있을까요? 또는 가장 좋은 방법은 무엇입니까?
컴파일 중 오류
class B {
public :
static int k;
};
int B::k = 0 ;
#define MACRO( classC, classB ) \
class classC : public classB { \
public : \
classC( A *aa ) : a( aa ) {} \ //(1)
A *a; \ //(2)
int f( int i ); \
}; \
int classC::f( int i ) \
{ \
classB::k = i; \ //error: '::' - open parenthesis expected
int j = classB::k; \ //нормально
return j; \
}
MACRO( C, B )
웹 엔진 버그
모든 광고는 금지되며 즉시 금지됩니다. 위험하지 않는 것이 좋습니다
블로그에서 지점을 시작하는 것이 좋습니다. 모든 것이 가능합니다.