C ++ определяет структуру члена класса и возвращает ее в функцию-член - PullRequest
9 голосов
/ 02 апреля 2011

Моя цель - такой класс, как:

class UserInformation
{
public:
    userInfo getInfo(int userId);
private:
    struct userInfo
    {
        int repu, quesCount, ansCount;
    };
    userInfo infoStruct;
    int date;
};

userInfo UserInformation::getInfo(int userId)
{
    infoStruct.repu = 1000; 
    return infoStruct;
}

но компилятор выдает ошибку, что в определении публичной функции getInfo(int) тип возврата userInfo не является именем типа.

Ответы [ 4 ]

16 голосов
/ 02 апреля 2011

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

class UserInformation
{
public:
    struct UserInfo
    {
        int repu, quesCount, ansCount;
    };


public:
    UserInfo getInfo(int userId);

private:
    UserInfo infoStruct;
    int date;
};

UserInformation::UserInfo UserInformation::getInfo(int userId)
{
    infoStruct.repu = 1000;
    return infoStruct;
}
5 голосов
/ 02 апреля 2011

Если функция-член общедоступна, то тип возвращаемого значения должен быть публично видимым! Поэтому переместите определение внутренней структуры в раздел public.

Обратите внимание, что оно должно быть определено перед функцией, которая его использует.

4 голосов
/ 02 апреля 2011

Просто сделай UserInformation::userInfo UserInformation::getInfo(int userId).

Кроме того, вы должны объявить userInfo публичным.

4 голосов
/ 02 апреля 2011

Вам необходимо изменить порядок членов UserInformation и поставить struct UserInfo выше декларации getInfo.Компилятор жалуется, что не может обработать сигнатуру для getInfo, потому что он еще не видел определения своего возвращаемого типа.

Кроме того, если вы возвращаете структуру из функции типаструктура должна быть видимой для вызывающих.Так что вам нужно сделать структуру public.

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