object *head = NULL, *tail = NULL; // EDIT
struct object {
vector <int> data;
object * read ( void ) ;
struct obj {
obj *next;
object * brach ( object * ) ;
};
};
object * object :: read ( void ) {
... // some code to read and return (dynamically token space) pointer
}
object * object :: obj :: brach ( object * p ) {
... // some code to make link list and pointer to middle
}
void show ( object * p ) {
... // to show data, from head to tail
}
关于嵌套结构的很多问题,但我认为它们都有类似的答案
如果我想将show函数放入read函数中,我该如何使用全局show函数?
一些努力;object * object :: read ( void ) {
... // some code to read and return (dynamically token space) pointer
:: show ( head ) ; ( ! )
head :: obj :: show ( head ) ; ( ! )
head . obj . show ( head ) ; ( ! )
}
标有(!)的所有行都会出错,为什么
object *p = new object ;
... // some code to read data
object *tmp = NULL;
tmp = p -> obj . brach ( p ) ; ( ! )
**how** can I fix it ?
答案 0 :(得分:1)
需要更多源代码。这之后不是声明的变量,可以猜测,哪个名称属于哪种类型。 但是:
show(object*)
函数是一个全局函数,因此调用不需要任何前缀。
object
结构具有任何obj
类型的成员变量。只声明了一个结构并定义了一些自己及其结构的方法。
因此,在main函数中,只有当obj::brach
函数为static
函数时才能调用obj* head;
方法。
在对象结构中声明p->head = new object::obj()
成员,创建它(p->head->brach(..)
),然后调用{{1}};
答案 1 :(得分:0)
似乎你来自非C ++背景(C#?)。 回答您的一些疑问: 从您的object :: read()范围来解决全局的正确方法是简单地Show(Head)或:: Show(head) - 我怀疑你在这里遇到问题的原因是因为head未被定义。
在主要程序中,您需要使用 - &gt;运算符专门取消引用指针而不是: p.obj.brach(p)你想要p-&gt; obj-&gt; brach(p)
这里表达的代码和想法似乎还有很多其他问题,但如果没有更多源代码并且想知道你想要做什么,就很难建议你。