在同一包和目录中找不到符号
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>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”。以上是关于在同一包和目录中找不到符号的主要内容,如果未能解决你的问题,请参考以下文章