错误:找不到符号,声明了对象,但看不到公共变量

时间:2018-07-07 22:58:54

标签: java compiler-errors pipes-filters

我正在

systemB\Plumber.java:44: error: cannot find symbol
            FilterOut.Connect(FilterWildPoints.pipe1);
                                              ^
symbol:   variable pipe1
location: variable FilterWildPoints of type MiddleFilter
systemB\Plumber.java:56: error: cannot find symbol
            FilterWildPoints.pipe1.start();
                            ^
symbol:   variable pipe1
location: variable FilterWildPoints of type MiddleFilter
2 errors

即使您,FilterWildPoints都有一个公共成员变量pipe1。

一个好主意是让“狂点过滤器”将流分成另外两个管道,并将其中一个管道连接到输出。

Plumber.java:

package systemB;
public class Plumber
{
   public static void main( String argv[])
   {
        SourceFilter FilterIn = new SourceFilter("./datasets/FlightData.dat");
        MiddleFilter FilterTemperature = new MiddleFilterTemperature();
        MiddleFilter FilterAltitude = new MiddleFilterAltitude();
        MiddleFilter FilterWildPoints = new MiddleFilterWildPoints();
        SinkFilter FilterOut = new SinkFilter("./OutputB.dat");

        FilterOut.Connect(FilterWildPoints.pipe1);
        FilterWildPoints.Connect(FilterAltitude);
        FilterAltitude.Connect(FilterTemperature);
        FilterTemperature.Connect(FilterIn);

        FilterIn.start();
        FilterTemperature.start();
        FilterAltitude.start();
        FilterWildPoints.pipe1.start();
        FilterOut.start();
   } // main
} // Plumber

MiddleFilterWildPoints.java:

package systemB;
import java.nio.ByteBuffer;

public class MiddleFilterWildPoints extends MiddleFilter
{
    public MiddleFilter pipe1;
    public MiddleFilter pipe2;

    MiddleFilterWildPoints()
    {
        this.pipe1 =  new MiddleFilter();
        this.pipe2 =  new MiddleFilter();
    }
    //...

} // MiddleFilter

我对Java不太熟悉,需要此代码进行作业,但找不到错误。

2 个答案:

答案 0 :(得分:2)

您已将FilterWildPoints声明为MiddleFilter,其中没有pipe1字段。

相反,声明类型为FilterWildPoints的{​​{1}}:

MiddleFilterWildPoints

java编译器仅查看声明的类型。


最好遵循变量名的标准Java命名约定,以小写字母开头。即

MiddleFilterWildPoints FilterWildPoints = new MiddleFilterWildPoints();

这样,可以更轻松地区分类名和变量名。

答案 1 :(得分:0)

您必须实例化对象MiddleFilter。这些实例将具有自己的属性。在您尝试使用名为Pipe1的MiddleFilter类中的静态字段。 (静态在同一类的所有实例中都是相同的)。 要解决此问题,请创建MiddleFilter middle = new MiddleFilter,然后使用middle.pipe。