Re: ambiguous access
От: Bell Россия  
Дата: 21.01.09 12:40
Оценка: 2 (1)
Здравствуйте, Sad_KirK, Вы писали:

...
S_K>Как мне в этом случае явно обратиться к конструктору класса "X"???

Если речь идет о невиртуальном наследовании, то наследник имеет доступ только к конструкторам непосредственных предков, и править нужно вот так:
class A 
{
public:
    class X
    {
    public:
        X(int i)
        {
        }
    };

    class B : public X
    {
    public:
        B(int i) : X(i) {}
    };
};

class C : A, A::B
 {
public:
     C(int n) : A::B(n)
     {
     }
     
 };


В случае с виртуальным наследованием потомки имеют доступ к виртуальной базе даже опосредовано:
class A 
{
public:
    class X
    {
    public:
        X(int i=0)
        {
        }
    };

    class B : virtual public X
    {
    };
};

class C : A, A::B
 {
public:
     C(int n) : X(n)
     {
     }
     
 };

Только тут не нужно забывать, что реально конструктор виртуальной базы вызывает самый потомственный (most-derived) потомок
Любите книгу — источник знаний (с) М.Горький
ambiguous access
От: Sad_KirK  
Дата: 21.01.09 12:22
Оценка:
// C2385
#include <stdio.h>

class A 
{
public:
    class X
    {
    public:
        X(int i)
        {
            printf_s("\nIn X");
        }
    };

    class B : public X
    {
    };
};

class C : A, A::B
 {
public:
     C(int n) : X(n)
     {
     }
     
 };

int main() 
{
    C aC(1000);    
}

Как мне в этом случае явно обратиться к конструктору класса "X"???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.