在同一包和目录中找不到符号

Posted

技术标签:

【中文标题】在同一包和目录中找不到符号【英文标题】:Cannot find symbol in same package and directory 【发布时间】:2015-12-12 10:07:00 【问题描述】:

我有两个课程,课程和课程。它们都在同一个包和同一个目录中。

Offering.java:

package assignment02;

public class Offering implements Comparable<Offering> 
    private Course course;
    private int CRN;
    private int semester;

    public Offering(Course course, int CRN, int semester) 
        this.course = course;
        this.CRN = CRN;
        this.semester = semester;
    

    public int getNumCredits() 
        return course.getNumCredits;
    

    public int getCRN() 
        return CRN;
    

    public int getSemester() 
        return semester;
    

    public int compareTo(Offering other) 
        if(other == null) return - 1;
        return semester - other.semester;
    

课程.java:

package assignment02;

public class Course 
    private String name;
    private String rubric;
    private String number;
    private int numCredits;

    public Course(String name, String rubric, String number, int numCredits) 
        this.name = name;
        this.rubric = rubric;
        this.number = number;
        this.numCredits = numCredits;
    

    public String getName() 
        return name;
    

    public String getRubric() 
        return rubric;
    

    public String getNumber() 
        return number;
    

    public int getNumCredits() 
        return numCredits;
    

当我尝试编译产品时,我收到错误:

D:\CS 140\assignment02>javac Offering.java
Offering.java:4: error: cannot find symbol
    private Course course;
            ^
   symbol:   class Course
   location: class Offering

Offering.java:8: error: cannot find symbol
    public Offering(Course course, int CRN, int semester) 
                    ^
   symbol:   class Course
   location: class OfferingOffering.java:8: error: cannot find symbol

我知道这个错误意味着编译器无法对“课程”做任何事情,但我真的不知道为什么。我也知道它最终会变得非常明显,但我似乎无法弄清楚。任何帮助将不胜感激。

【问题讨论】:

不应该是D:\CS 140&gt;javac assignment02\Offering.java吗? 你先编译Course.java了吗? 将目录更改为父目录并尝试javac assignment02\Course.java assignment02\Offering.java。然后,您还应该能够单独编译这些类。编译器正在尝试从您的当前位置找到 assignment02 包中的 Course @John 对于除了独立的单个类(单个文件)项目之外的任何东西,我建议您使用 IntelliJ 之类的 IDE。 【参考方案1】:

你需要先编译 Course.java——Offering.java 依赖它,因为你引用了它。还有,

public int getNumCredits() 
    return course.getNumCredits;

应该是

public int getNumCredits() 
    return course.getNumCredits();

【讨论】:

Course.java 已编译,但我仍然遇到同样的错误【参考方案2】:

将目录更改为assignment02 的父目录。然后你应该可以使用

javac assignment02\Course.java assignment02\Offering.java

javac assignment02\Course.java 
javac assignment02\Offering.java

甚至

javac assignment02\*.java

编译器正在从您当前目录的assignment02 包中查找Course 类(因此,当您在assignment02 目录中时,它实际上是在尝试查找assignment02/assignment02,这显然不是不对)。

虽然这将纠正您当前的问题,但您将收到以下错误:

assignment02\Offering.java:15: cannot find symbol
symbol  : variable getNumCredits
location: class assignment02.Course
    return course.getNumCredits;
                 ^
1 error

哪些需要更正。

【讨论】:

嗯,你解决了第一个问题,谢谢!现在我遇到了这个错误,但是当我查看 Offering.java 时,我解决了这个问题。不过,编译器仍在读取错误的版本。解决了这个问题后,我确实保存了 Offering.java 尝试删除.class文件 不,仍然无法识别更改。这很奇怪 我会确保你正在编辑的文件和你正在编译的文件是一样的 一旦我纠正了第二个错误,它对我来说很好【参考方案3】:

您也可以使用“-classpath”参数进行编译,并将其值设置为父目录,如下所示:

javac -classpath .. Offering.java

【讨论】:

你也可以把那个开关缩写成“-cp”。

以上是关于在同一包和目录中找不到符号的主要内容,如果未能解决你的问题,请参考以下文章

NASM 和 GDB 符号:“在符号文件中找不到任何代码段。”

java 中 “找不到符号”的错误

在 android studio 中找不到符号错误

在java中找不到符号

java 中总是出现找不到符号 是怎么回事

错误:在 ParseQuery.or() 中找不到符号类“或”;