больше проблем с вложенной структурой - PullRequest
0 голосов
/ 27 января 2011
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
}

Много вопросов о вложенной структуре, но я думаю, что все они имеют похожий ответ

  • Если я хочу включить функцию показа в функцию чтения, как я могу использоватьглобальная функция показа в нем?

    некоторые усилия;

    object * object :: read ( void ) {
    
     ... // some code to read and return  (dynamically token space) pointer
    
     :: show ( head ) ;  ( ! ) 
    
     head :: obj :: show ( head ) ; ( ! )
    
     head . obj . show ( head ) ;   ( ! )
    
     }  
    

    вся строка, отмеченная (!), выдает ошибку, WHY

  • в основной функции

    object *p = new object ;
    ... // some code to read data
    object *tmp = NULL;
    tmp = p -> obj . brach ( p ) ; ( ! ) 
    
    **how** can I fix it ? 
    

Ответы [ 2 ]

1 голос
/ 27 января 2011

Нужно больше исходного кода.Здесь не объявлены переменные, после этого можно угадать, какое имя принадлежит какому типу.Но:

Функция show(object*) является глобальной функцией, поэтому для вызова не требуется префикс.

Структура object имеет любую переменную-член типа obj.Только структура объявляется и определяется некоторые методы своей и ее структуры.Таким образом, в основной функции он не может вызвать метод obj::brach, только если это будет функция static.

Объявите элемент obj* head; в структуре объекта, создайте его (p->head = new object::obj()), а затемзвоните p->head->brach(..);

0 голосов
/ 27 января 2011

Кажется, вы не из C ++ (C #?).В ответ на некоторые из ваших запросов: Правильный способ обращения к глобальному из области вашего объекта :: read () - это просто Show (Head) или :: Show (head) - я подозреваю, что причина, по которой у вас возникают проблемы, заключается в том, чтоhead не определен.

В вашей основной процедуре вам нужно использовать оператор -> для разыменования указателя, а не: p.obj.brach (p) вы хотите p-> obj-> brach (p)

Похоже, что в коде и идеях, выраженных здесь, есть еще много неправильного, но вам сложно посоветовать без дополнительного исходного кода и идеи о том, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...