类中的嵌套类或结构

发布于 2024-12-05 01:55:34 字数 575 浏览 0 评论 0原文

代码先行:

//.h 文件

class A
{
    public:
        A();
        B makeB(int);  //question 1
    //protected:
        struct B {
            int _id;
            B(int id);
        }
};

//.cpp 文件

A::A()
{  cout<<"A ctor\n"; }

B A::makeB(int id)  //question 2
{  return B(id); }

2 个问题:

1.我应该将 makeB() 函数放在 struct B 的定义之后吗?

2.在.cpp文件中,应该在每个B前面加上A:: ?

PS: 1.如果makeB函数不处理B实例,而是处理B指针或引用,我可以在makeB前面放置struct B的前向声明吗? (我只是不想将 struct B 的定义放在 mem-funcs 前面)。

Code goes first:

//.h file

class A
{
    public:
        A();
        B makeB(int);  //question 1
    //protected:
        struct B {
            int _id;
            B(int id);
        }
};

//.cpp file

A::A()
{  cout<<"A ctor\n"; }

B A::makeB(int id)  //question 2
{  return B(id); }

2 questions:

1.Should I put makeB() function after the definition of struct B?

2.In .cpp file, should prefix every B with A:: ?

PS:
1.If makeB function doesn't deal with B instances, but B pointers or refs, can I put a forward decl of struct B in front of makeB? (I just don't want put the definition of struct B in front of mem-funcs).

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

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

发布评论

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

评论(3

帅气尐潴 2024-12-12 01:55:34

这编译得很好:

class A
{
 public:
    struct B;

    A();
    B makeB(int);  //question 1

    struct B {
        int _id;
        B(int id) {};
    };
};

A::A() {}

A::B A::makeB(int id)  //question 2
{  return B(id); }

This compiles fine:

class A
{
 public:
    struct B;

    A();
    B makeB(int);  //question 1

    struct B {
        int _id;
        B(int id) {};
    };
};

A::A() {}

A::B A::makeB(int id)  //question 2
{  return B(id); }
Saygoodbye 2024-12-12 01:55:34

Q1.是的(它需要知道struct B的大小)

QPS1。是的(如果它只使用指向 B 的指针,则不需要知道大小)

Q2。另外,您可以编写“using A::B”,然后像往常一样使用“B”。

Q1. Yes (it needs to know the size of struct B)

QPS1. Yes (if it only uses pointers to B, it does not need to know the size)

Q2. Also, you can write "using A::B" and then, use "B" as usual.

心碎的声音 2024-12-12 01:55:34

是的,是的。否则,这应该很难编译。

Yes and yes. Otherwise, this should be hard to compile.

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