Как получить ссылку на структуру? - PullRequest
0 голосов
/ 25 июня 2018

Я изучаю книгу 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 голосов
/ 25 июня 2018

Вы можете написать функцию create () следующим образом:

Stack::stack Stack::create()
{
      Stack::Rep *r = new Rep();
      return *r ;
}
0 голосов
/ 25 июня 2018

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

Я не предлагаю вам сделать это таким образом. Просто указав, где вы идете не так.

...