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

时间:2011-04-02 12:24:35

标签: c++ class function struct 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;
}

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

4 个答案:

答案 0 :(得分:15)

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

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;
}

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:4)

只需UserInformation::userInfo UserInformation::getInfo(int userId)

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