13

我的目标是这样的课程:

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

4 回答 4

17

将嵌套结构类型公开是有意义的,因为用户代码应该能够使用它。此外,将结构的声明放在第一次使用之前。在类范围之外使用范围解析::来引用嵌套类型。

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;
}
于 2011-04-02T12:37:17.467 回答
6

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

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

于 2011-04-02T12:26:39.780 回答
5

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

此外,您应该声明userInfo公开。

于 2011-04-02T12:27:30.547 回答
4

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

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

于 2011-04-02T12:27:29.930 回答