Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中未定义的方法_Java_Methods_Undefined - Fatal编程技术网

Java中未定义的方法

Java中未定义的方法,java,methods,undefined,Java,Methods,Undefined,我正在从事一个包含多个类的Java项目。一个类具有main方法,一个类是max-heap数据结构,第三个类是要存储在max-heap中的对象的包装器类 在包装器类中,我定义了以下方法: public void setHeapLoc(int l) { heapLoc = l; } 在max heap类中,我有以下代码: public int insert(CompEq comp) { assert s < size : "No room"; int

我正在从事一个包含多个类的Java项目。一个类具有main方法,一个类是max-heap数据结构,第三个类是要存储在max-heap中的对象的包装器类

在包装器类中,我定义了以下方法:

public void setHeapLoc(int l)
    {
        heapLoc = l;
    }
在max heap类中,我有以下代码:

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;
}
它工作得很好

有人知道这是什么原因吗

编辑:铸造没有帮助。改成

Heap[current].setHeapLoc(current);

添加错误“从CompEq到CompEq的不必要强制转换”。

CompEq
堆的子类,并且
setHeapLoc
CompEq
中定义

在这种情况下,您需要先强制转换它,然后才能调用该函数。我希望你能意识到这可能是某个地方设计不好的迹象

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

由于没有为堆类型定义方法setHeapLoc,以下操作将导致编译错误。因此,允许此赋值,因为Heap是CompEq的超类。为了使用类类型的引用来调用方法,必须在类层次结构中该类或其上定义该方法。因此,类Heap的对象不能调用类CompEq中存在的方法,因为方法CompEqMethod不存在于类Heap或其任何超类中。因此,这个问题可以通过简单的向下转换来解决,方法是将Heap对象引用转换为CompEq类对象引用,就像在程序中所做的那样


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

发布堆变量的声明和初始化,以及HeapEq类定义?另外,因为您提到了强制转换并不能帮助发布进行强制转换的部分。不,CompEq是它自己的类。堆存储CompEq类型的对象。setHeapLoc在CompEq中定义。我试过铸造,它没有改变任何东西。@elykl33t你能告诉我们
CompEq
类的定义吗。
Heap
中的大写字母抛出了我,通常大写字母用于类型
((CompEq)Heap[current]).setHeapLoc(current)