> > Этот фрагмент нельзя квалифицировать как обращение к test изнутри класса. > Вызов test2(); полностью идентичен вызову test2(&A::test); и поэтому такой вызов можно сделать либо из функции-члена класса A, либо из дружественной функции. > Фуункция main не объявлена в классе A как дружественная, поэтому из нее этот вызов запрещен.
Прошу прощения, я наврал.
Так вызвать нельзя: test2(&A::test);, а так: test2(); можно.
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, bolshik, Вы писали:
B> знатоки, помогите советом -- правильно ли с точки зрения стандарта, что следующий код не компиллится с причиной
B>
B>error C2248: 'A::test' : cannot access private member declared in class 'A'
B> c:\Work\...\test.cpp(38) : see declaration of 'A::test'
B> c:\Work\...\test.cpp(36) : see declaration of 'A'
ты не можешь напрямую из main() вызывать приватного мембера класса A. Вот компилятор и ругается
B>
Здравствуйте, rg45, Вы писали:
R>Так вызвать нельзя: test2(&A::test);, а так: test2(); можно.
+1
11/7 The names in a default argument expression (8.3.6) are bound at the point of declaration, and access is checked at that point rather than at any points of use of the default argument expression.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
знатоки, помогите советом -- правильно ли с точки зрения стандарта, что следующий код не компиллится с причиной
error C2248: 'A::test' : cannot access private member declared in class 'A'
c:\Work\...\test.cpp(38) : see declaration of 'A::test'
c:\Work\...\test.cpp(36) : see declaration of 'A'
class A {
typedef void (*FuncPointer)();
static void test() { printf("A::test()\n"); }
public:
void test2(FuncPointer p_Func = test) { (*p_Func)(); }
};
void another() {
printf("another\n");
}
int main() {
A a;
a.test();
a.test2(another);
return 0;
}
ведь все member'ы одного класса имеют доступ друг к другу?
"bolshik" <29601@users.rsdn.ru> wrote in message news:1783614@news.rsdn.ru... > знатоки, помогите советом -- правильно ли с точки зрения стандарта, что следующий код не компиллится с причиной >
> > ведь все member'ы одного класса имеют доступ друг к другу?
void test2(FuncPointer p_Func = test);
Этот фрагмент нельзя квалифицировать как обращение к test изнутри класса.
Вызов test2(); полностью идентичен вызову test2(&A::test); и поэтому такой вызов можно сделать либо из функции-члена класса A, либо из дружественной функции.
Фуункция main не объявлена в классе A как дружественная, поэтому из нее этот вызов запрещен.
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Этот фрагмент нельзя квалифицировать как обращение к test изнутри класса. R>Вызов test2(); полностью идентичен вызову test2(&A::test); и поэтому такой вызов можно сделать либо из функции-члена класса A, либо из дружественной функции. R>Фуункция main не объявлена в классе A как дружественная, поэтому из нее этот вызов запрещен.
на самом деле, только сейчас заметил...
Вместо
int main() {
A a;
a.test();
a.test2(another);
return 0;
}
надо писать
int main() {
A a;
a.test2();
a.test2(another);
return 0;
}
Тогда все хорошо и, следовательно, test2() != test2(&A::test).
Здравствуйте, TSS, Вы писали:
TSS>Здравствуйте, bolshik, Вы писали:
B>> знатоки, помогите советом -- правильно ли с точки зрения стандарта, что следующий код не компиллится с причиной
B>>
B>>error C2248: 'A::test' : cannot access private member declared in class 'A'
B>> c:\Work\...\test.cpp(38) : see declaration of 'A::test'
B>> c:\Work\...\test.cpp(36) : see declaration of 'A'
TSS>ты не можешь напрямую из main() вызывать приватного мембера класса A. Вот компилятор и ругается