C++定义类成员结构并在成员函数中返回它

yol*_*olo 10 c++ struct class function class-members

我的目标是:

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;
}
Run Code Online (Sandbox Code Playgroud)

但编译器给出的错误是,在定义公共函数时getInfo(int),返回类型userInfo不是类型名称.

pic*_*c11 17

将嵌套结构类型设置为public是有意义的,因为用户代码应该能够使用它.此外,将结构的声明放在首次使用之前.在类范围之外使用scope resolution ::来引用嵌套类型.

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;
}
Run Code Online (Sandbox Code Playgroud)


Oli*_*rth 5

如果成员函数是公共的,则返回类型必须是公开可见的!因此,将内部结构定义移动到该public部分中.

另请注意,必须在使用它的函数之前定义它.


Ale*_*ler 5

就做UserInformation::userInfo UserInformation::getInfo(int userId)

另外,你应该声明userInfopublic。


Jon*_*Jon 4

您需要更改 的成员的顺序UserInformation并将其放在的声明struct UserInfo 之上getInfo。编译器抱怨它无法计算出 for 的签名,getInfo因为它还没有看到其返回类型的定义。

此外,如果您从函数返回一个结构体,则该结构体的类型必须对调用者可见。public所以你还需要制作结构。