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

发布于 2024-10-30 00:06:41 字数 424 浏览 0 评论 0原文

我的目标是这样的类:

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 不是类型名称。

My goal is a class like:

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

but the compiler gives error that in defintion of the public function getInfo(int) the return type userInfo is not a type name.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ζ澈沫 2024-11-06 00:06:41

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

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

It makes sense to make the nested structure type public, since the user code should be able to use it. Also, place the declaration of the structure before the point of its first use. Outside the class scope use scope resolution :: to refer to nested types.

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;
}
夜未央樱花落 2024-11-06 00:06:41

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

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

If the member function is public, then the return type must be publicly visible! Therefore, move the inner struct definition into the public section.

Note also that it must be defined before the function that uses it.

傲影 2024-11-06 00:06:41

只需执行 UserInformation::userInfo UserInformation::getInfo(int userId) 即可。

另外,您应该将 userInfo 声明为公共。

Just do UserInformation::userInfo UserInformation::getInfo(int userId).

Also, you should declare userInfo public.

谷夏 2024-11-06 00:06:41

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

此外,如果您从函数返回一个结构体,则该结构体的类型必须对调用者可见。因此,您还需要将结构设为 public 。

You need to change the order of the members of UserInformation and put struct UserInfo above the declaration of getInfo. The compiler complains that it can't work out the signature for getInfo because it hasn't seen the definition of its return type yet.

Also, if you are returning a struct from the function the type of the struct must be visible to the callers. So you need to make the struct public as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文