2016-08-19 2 views
0

Есть ли способ создать производный код class с базы class?Создать экземпляр производного класса в базовом классе

Если я пытаюсь код, как этот

public ref class Foo 
    { 
    static Bar^ Create() { return gcnew Bar(); } 
    }; 

public ref class Bar : Foo {}; 

Я получаю сообщение об ошибке

ошибка C2143: синтаксическая ошибка: отсутствует ';' до того '^'

Если я пытаюсь поменять местами этих определений:

public ref class Bar : Foo {}; 

public ref class Foo 
    { 
    static Bar^ Create() { return gcnew Bar(); } 
    }; 

Я получаю сообщение об ошибке

ошибка C2504: 'Foo': базовый класс не определен

ответ

2

Компилятор C++/CLI имеет то же ограничение, что и компилятор C++. Это однопроходный компилятор, все объявления должны быть известны до их использования. Вам придется прыгать через тот же обруч, что вы делаете в C++, вы должны написать опережающее объявление:

ref class Bar;    // Forward declaration 

public ref class Foo 
{ 
    static Bar^ Create(); // Can't be inline anymore 
}; 

public ref class Bar : Foo {}; 

Хорошо, теперь все определения доступны:

Bar^ Foo::Create() { 
    return gcnew Bar; 
} 

FWIW: ничего потерянный из-за того, что он больше не может определить встроенную функцию Create(). Это работа дрожания с встроенным кодом и всегда будет включать небольшие методы, такие как Create().

+0

Итак, нет способа получить это с помощью встроенных методов? –

+0

Как я уже отмечал, никогда не волнуйся о методах вложения, это не имеет отношения к коду C++/CLI. Невосприимчивый к коду C++, а также btw, современные оптимизаторы полностью игнорируют подсказки. –

+0

Мне просто нравится, когда все методы являются либо встроенными, либо separete 'cpp' файлом (проще для поиска). Думаю, мне придется либо переместить все методы, либо сделать исключение. –

Смежные вопросы