我正在用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;
}
我不知道自己在哪里错,有人可以帮我解释一下,如果可能的话。
答案 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 ;
}