2013-09-12 4 views
0

Я работаю над проектом Java с несколькими классами. Один класс имеет основной метод, один класс представляет собой структуру данных максимальной кучи, а третий является классом-оболочкой для объекта, который должен храниться в максимальной куче.Метод undefined в Java

В классе обертки, я определяю следующий метод:

public void setHeapLoc(int l) 
    { 
     heapLoc = l; 
    } 

В макс класса кучи, у меня есть следующий код:

public int insert(CompEq comp) { 
    assert s < size : "No room"; 
    int current = size++; 
    Heap[current] = comp;    
    while ((current != 0) && (Heap[current].compareTo(Heap[parent(current)]) > 0)) { 
    swap(Heap, current, parent(current)); 
    current = parent(current); 
    } 
    Heap[current].setHeapLoc(current); //<-------This line is the problem 
    return curr; 
} 

На линии я указал выше в метод, я получаю ошибку «Метод setHeapLoc (int) не определен для типа CompEq«

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

CompEq temp = new CompEq(eq); 
temp.setHeapLoc(1); 

Он отлично работает.

У кого-нибудь есть идеи, что может быть причиной этого?

EDIT: Кастинг не помогает. Изменение его на

Heap[current].setHeapLoc(current); 

ADDS Ошибка «Ненужное отключение от CompEq до CompEq.»

+2

Опубликовать объявление и инициализировать переменную кучи, а также определение класса HeapEq? – gyan

+0

Кроме того, поскольку вы упомянули, что кастинг не помогает опубликовать ту часть, в которой вы снимаете. – Thihara

ответ

0

Является CompEq подкласс Heap и setHeapLoc определяется в CompEq?

В этом случае вам нужно будет отбросить его, прежде чем вы сможете вызвать функцию. Я надеюсь, что вы понимаете, что это, вероятно, свидетельствует о плохом дизайне где-то

((CompEq)Heap[current]).setHeapLoc(current) 
+0

Нет, CompEq - это собственный класс. Куча хранит объекты типа CompEq. setHeapLoc определяется в CompEq. Я пробовал кастинг, это ничего не меняет. – elykl33t

+0

@ elykl33t Можете ли вы показать нам определение класса 'CompEq'. Верхний регистр в «Куче» бросил меня, обычно верхний регистр используется для типов –

0

Поскольку метод setHeapLoc не определен для кучного Типа После приведет к компиляции error.therefore, это назначение допускаются в качестве динамической памяти суперкласса CompEq , Чтобы использовать ссылку типа класса для вызова метода, этот метод должен быть определен в классе или выше этого класса в иерархии классов. Следовательно, объект класса Heap не может вызывать метод, присутствующий в классе CompEq, поскольку метод CompEqMethod отсутствует в классе Heap или любом из его суперклассов. Следовательно, эта проблема может быть решена простым down down путем литья ссылки объекта кучи на ссылку на объект класса CompEq, как это сделано в программе.

((CompEq) Heap [current]). SetHeapLoc (текущий);

+0

Кастинг ничего не делает. См. Мое редактирование в OP. – elykl33t

Смежные вопросы