Как использовать структуры, объявленные закрытыми?

0

Я работаю над проектом с предварительно подготовленным файлом.hpp со всеми объявлениями и т.д.

Структура объявляется в частной части класса вместе с некоторыми частными членами.

Мне нужно создать массив с типом структуры в моем.cpp файле.

//.hpp

private:
     struct foo
     {
          std::string a;
          unsigned int b;
     };

     std::string* x;
     unsigned int y;

//.cpp

unsigned int returny()
{
     return y;    // No errors
}

foo newArray[10]; // Compile time error; unknown type name

Почему я могу вернуть y, который также является приватным, но не выделяет массив из структуры foo?

Как я могу это исправить? (Я во вступительном классе C++... поэтому, надеюсь, есть простое решение)

  • 2
    Пожалуйста, вставьте полный воспроизводимый код ...
  • 0
    Если newArray находится внутри функции-члена, вы не должны получать эту ошибку. Пожалуйста, разместите полный пример. Если это не внутри функции-члена, вы, вероятно, делаете это неправильно. (Если это вводный класс C ++ и вы получили заголовок, вы должны выполнить упражнение, не создавая массив структуры вне класса.)
Теги:
private

2 ответа

1

вы должны определить структуру int вне класса, как это

struct Foo
     {
          std::string a;
          unsigned int b;
     };

class A {
private:
Foo foo;
...
}
1

Есть несколько вопросов.

  1. Вы не можете использовать тип, определенный в private разделе класса, как вы пытаетесь.

  2. Вложенный тип можно использовать, указав соответствующую область.

    EnclosingClass::foo newArray[10];
    

    Но это будет работать только в том случае, если foo определен в public разделе EnclosingClass.

Ещё вопросы

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