Класс шаблона: нет конструктора по умолчанию - PullRequest
3 голосов
/ 13 мая 2011

Я знаю, что есть миллион сообщений об этом, но я до сих пор не могу понять, почему это не работает = /

эта строка:

test = new Test2<Test>;

дает мне эту ошибку:

error C2512: 'Test2<PARENT>' : no appropriate default constructor available
with
[
    PARENT=Test
]

код:

template<class PARENT>
class Test2;

////////////////////////////

class Test
{
public:
    Test2<Test> *test;

    Test()
    {
        test = new Test2<Test>;
    }
};

/////////////////////////////

template<class PARENT>
class Test2
{
public:
    PARENT *parent;
};

////////////////////////////

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

6 голосов
/ 13 мая 2011

В момент создания экземпляра (т. Е. Внутри конструктора Test) все, что есть у компилятора, - это прямое объявление из Test2<>;он еще не знает, какие конструкторы доступны.

Чтобы решить, либо переместите определение Test2<> до , чем Test, либо переместите определение Testконструктор вне определения класса (и после определения Test2<>).

0 голосов
/ 13 мая 2011

Строка test = new Test2<Test>; выполняется внутри конструктора по умолчанию Test.И эта строка будет вызывать конструктор / конструктор по умолчанию без аргументов.Конструктор Test все еще не завершен, когда вызывается упомянутое утверждение.

0 голосов
/ 13 мая 2011

Для меня ваш код выдает (правильно, ИМХО) ошибку:

invalid use of incomplete type 'struct Test2<Test>'

Это с g ++ 4.5.1.В тот момент, когда вы говорите:

test = new Test2<Test>;

Test2 не определен, объявлен только форвард.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...