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

0

Мне интересно, есть ли способ, чтобы массив в классе/структуре не имел точного значения, поэтому, когда он унаследован, он может иметь другое значение, чем другие структуры. В этом примере:

struct foo
{
    virtual int test[];
};
struct bar : foo
{
    int test[3];
};
struct bars : foo
{
    int test[5]
};

В этом примере я пытаюсь определить новый массив int, имеющий ключевое слово virtual в классе foo. Как вы можете видеть, что bar тест массив размер 3, но в bars тест массив размер 5. Однако, когда я пытаюсь наследовать foo к bar или bars, он терпит неудачу и дает мне ошибку: invalid base class.

Изменение: Извините, что мой пост не совсем ясен. Я пытался лучше объяснить массив неизвестного размера, но почему-то оказался чем-то более запутанным. Кроме того, для людей, которые собираются сказать, используйте std::vector, пожалуйста, перечитайте мои изменения выше

  • 0
    virtual int test[]; это не виртуальная функция
Теги:
arrays
struct
inheritance

2 ответа

0

Не уверен, чего вы пытаетесь достичь. Независимо от того, вы можете использовать;

struct foo
{
    foo(int* t) : test(t) {}
    int* test;
};
struct bar : foo
{
    bar() : foo(derived_test) {}

    int derived_test[3];
};

Будет гораздо лучше использовать std::vector<int>.

struct foo
{
    foo(size_t size) : test(size) {}
    std::vector<int> test;
};
struct bar : foo
{
    bar() : foo(3) {}
};
0

Есть ли обходной путь? Еще лучше, есть ли что-то более эффективное, чем массив, который позволяет создавать новые статические массивы из унаследованного динамического массива?

Используйте std :: vector в базовом классе... и сделайте его защищенным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню