(Untitled)

Sep 16, 2011 10:46



//file: b.h

template
struct B
{
T obj;
void a()
{
obj.A::foo();
}
};

//file: main.cpp

#include "b.h"

struct A
{
void foo() {}
};

struct D: public A {};

B x;

int main()
{
x.a();
return 0;
}

In member function ‘void B::a()’:
error: ‘A’ has not been declared
A - один из родительских классов ( Read more... )

Leave a comment

Comments 24

r0land September 22 2011, 09:52:43 UTC
template
inline
void B::a()
{
typeof(obj.A)::foo();
};

Reply

othojee_mesto September 22 2011, 18:27:40 UTC
где вы в C++ typeof отыскали???

Reply

othojee_mesto September 25 2011, 00:18:31 UTC
нет в C++ такого слова
и в C, насколько я знаю, тоже нет
ваша ссылка указывает на нестандартное расширение языка - я таким не пользуюсь и вам не советую

Reply


caracrist September 22 2011, 19:02:48 UTC
obj.T::A::foo();

Reply

othojee_mesto September 22 2011, 19:50:57 UTC
после инстанциирования с типом D

In member function ‘void B::a() [with T = D]’:
error: no type named ‘A’ in ‘struct D’

Reply

qehgt September 22 2011, 20:11:18 UTC
является ли 'A' базовым классом для 'D'?

Reply

othojee_mesto September 22 2011, 20:14:48 UTC
да
это не важно в этом случае - приведенная запись подразумевает что A - внутренний класс темплетного параметра - а оно как раз наоборот

Reply


qehgt September 22 2011, 19:04:53 UTC
Не, идея не понятна.

И что это за запись:
template
struct B

Это парсер скобки съел, или так и надо?

Reply

othojee_mesto September 22 2011, 19:47:30 UTC
съел

Reply

qehgt September 22 2011, 20:01:55 UTC
Я не телепат, что именно вы сделать хотите, мне непонятно.

Reply

othojee_mesto September 22 2011, 20:04:34 UTC
A - базовый класс темплетного параметра
такое нужно при множественном наследовании при совпадении имен в предках

Reply


conceptacid September 23 2011, 18:14:56 UTC
а зачем это вообще? можно контекст пожалуйста?

Reply

othojee_mesto September 25 2011, 00:10:25 UTC
класс, подствляемый в темплетный параметр, может иметь множественное наследование с мемберами, имеюшими одинаковые имена в родителях

Reply


Leave a comment

Up