マンガでよめる痔のこと・薬のこと

一つのプログラムに対して、いくつかのファイルに分けて
記述されているとき、
たとえば、ファイル A.java と B.java があって
【A.java】
package shop;
 ・
 ・
 public class Shop {
  ・
  ・
  ・
}

【B.java】
packeage shop;
 ・
 ・
public class Buy(Shop shop){


}

という感じで、A.java内で定義したクラス型を他のファイルで使うと、
コンパイル時に、「シンボルを解決できません」というコンパイルエラーが出て
コンパイルできません。
こういう場合はどうすれば、良いのでしょうか?
初心者なので、非常に初歩的な質問かと思いますがよろしくお願いします。

A 回答 (3件)

>今後、いろいろなWEBアプリを作る際に、そのたびCLASSPATHを


>追加していくのでしょうか?
追加していく必要はあります。
今作成されているWEBアプリとは別にアプリを作成しようとした場合
、あらたに「CLASSPATH」を追加してあげないとコンパイルできません。
javac自体がどこにファイルがあるのかわからないので指定してあげないとだめですね。
    • good
    • 0

まずは、publicなクラス名とソースファイル名は一致させましょう。



shop.Shopなら
shop/Shop.java

shop.Buyなら
shop/Buy.java

です。

参考URL:http://www.tcct.zaq.ne.jp/ayato/programming/java …
    • good
    • 0

【B.java】


packeage shop;

綴りがpackeageになっています。正しくはpackageですね。
エラーが出るときにはエラー発見箇所が何行目か?という表示も
合わせて出るはずですので参照されると編集が早くなります。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
それに関しましては、ここへ書き込む際の純粋な記述ミスです。
また、B.java内でも、
public class XXX{
public void YYY(Aで定義したクラス そのクラス型変数){
・・・・
 }
}
と一般的な使い方です。
ソースの内容には全く記述ミスはありません。
(配布サンプルです。完全に完成されたソースですので)

とにかく、エラーは、ファイルAで定義されたクラス(クラス型)を
ファイルBで使う(?)箇所ごとに
「シンボルを解決できません」と出ます。

あれから、いろいろしてみて、
「CLASSPATH」にこのファイル群が入っているフォルダの親フォルダのパスを
追加してみると、エラーなくコンパイルできました。
しかし、今後、いろいろなWEBアプリを作る際に、そのたびCLASSPATHを
追加していくのでしょうか?
ほかに良い対処法がございましたらお教えください。

お礼日時:2003/01/20 04:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシンボルを解決できません。 と出るんですが・・・

どうすればいいんでしょうか。。

Kada5.java41:シンボルを解決できません。
シンボル:変数 i
場所  :Kada5の クラス
if(i == 10){
 ^
エラー1個

と表示されて、先に進むことが出来ません。
このエラーはどういうえらなのでしょうか?

Aベストアンサー

他の方への補足より:

for (int i = 0; i < 10; i++){・・・・・・・


if(i ==10){・・・・・・・・}

変数が使える範囲 (「スコープ」) を意識しなくっちゃね。int 型の i という変数は、for ループの中で宣言してあるから、for ループの中でしか使えない。for ループを出た後で i を使おうとしても、もう使用期限が切れているということ。

int i;

for (i = 0; i < 10; i++){・・・・・・・


if(i ==10){・・・・・・・・}

こういう風にループの外で宣言しておくと、ループを出た後でも変数は生き残っている。

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。


人気Q&Aランキング

おすすめ情報