如何获得对结构的引用?

时间:2018-06-25 11:59:22

标签: c++ struct namespaces

我正在用C ++本书学习编程语言,在第30页第2章中,bjarne编写了类似的内容:

namespace Stack
{
    const int MAX_SIZE = 200;
    struct Rep;
    typedef Rep& stack;

    stack create();
    void destroy(stack s);

    void push(stack s, int i);
    int pop(stack s);
}

结构:

struct Stack::Rep
{
    int ar[200];
    int top;
};

我正在尝试返回函数Stack::create()中的引用,但是我做不到,尝试了很多方法,但是遇到了一些错误。

"initial value of reference to non-const must be an lvalue" : 

Stack::stack Stack::create()
{
   Stack::stack s = new Rep();
}

"reference variable "s" requires an initializer"

Stack::stack Stack::create()
{
   Stack::stack s;
}

我不知道自己在哪里错,有人可以帮我解释一下,如果可能的话。

2 个答案:

答案 0 :(得分:1)

stack是typedef:typedef Rep& stack;。如果您替换以下typedef,请考虑一下您的功能:

Stack::stack s = new Rep();
=
Rep& s = new Rep(); // Can't work, `new` returns a pointer (not a reference)
                    // which you assign to a reference!

Stack::stack s;
=
Rep& s; // A reference cannot exist without being assigned!

由于您要返回引用,因此结构必须存在于调用者可访问的位置。类似于:

namespace Stack
{
...
Rep myGlobalStack;

stack create() {
    return myGlobalStack;
}

我不建议您这样做。只是指出您要去哪里。

答案 1 :(得分:0)

您可以通过以下方式编写create()函数:

Stack::stack Stack::create()
{
      Stack::Rep *r = new Rep();
      return *r ;
}