类型fbMain的封闭实例不可访问。必须使用类型fbMain的封闭实例限定分配。

11

在我声明的类"public class pcb"中,我有以下构造函数:public pcb(int p, int a, int b)

public static void main(String[] args)中,我尝试在for循环中调用构造函数并将"pcb"添加到数组的不同位置。下面是for循环,最后一行是我得到错误的地方:

for(int i=0; i<numJob; i++){
   pI = scan.nextInt();
   arr = scan.nextInt();
   bst = scan.nextInt();
   notHere[i]=new pcb(pI, arr, bst);
}

我做错了什么?是语法问题还是程序结构的问题。我没有太多使用Java的经验,我想这是我的主要问题。


你忘记展示pcb类给我们看了。 - Alexander Pavlov
2个回答

21

你没有提供所有相关的代码,但是错误提示表明pcbfbMain的内部类:

public class fbMain {
    //...
    public class pcb {
    }
    //...
}

你可以通过将 pcb 声明为静态变量来解决这个错误:

 public static class pcb {
 }

或者将这个类移动到它自己的文件中。或者,如果pcb不能是静态的 (因为它与fbMain的一个实例相关),你可以通过传递一个fbMain的实例来创建一个新的pcb

notHere[i] = instanceOfFbMain.new pcb(pI, arr, bst);

很可能你需要的是第一个选项。请注意,按照约定,Java类型名称以大写字母开头。


3
static 添加到您的类声明中,就像这样
public static class pcb...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接