ラベル エラーコード の投稿を表示しています。 すべての投稿を表示
ラベル エラーコード の投稿を表示しています。 すべての投稿を表示

2019年9月8日日曜日

Java/クラス継承

新しい会社でJavaを新たに学ぶことになり、JavaSilverを勉強中。

勉強の記録したことを、自分の記録としても残しておこうと思う。

可能な限りシンプルな例で、言語の仕様などを理解できるように書いていこうと思う。

前提

JVMはインストールされている前提とする。

開発する環境はいろいろあるとは思うが(実際自分のパソコンにもSTSが入っているが)、愚直にコマンドラインからコンパイルを行っていく。

クラスの継承

Jobsというクラスを継承して、EngineerやPolice、Firefighter、Doctorといった子クラスを作っていくことを考える。

(まずはEngineerをつくるので、Policeなどはまだつくらないかもしれないが)

まず、Jobsクラスをつくる。
//Jobs.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Jobs{
int salary;
}
同様に、Engineerクラスを作る。
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extends Jobs{
  Engineer(){
    salary = 50;
  }
}
この二つのファイルを作成し、同じディレクトリに置いておく。

コマンドでカレントディレクトリ(この二つのファイルが置いてあるディレクトリ)に移動したら、以下のようにコマンドを打つ。
$javac Engineer.java
そうすると、同じディレクトリに、Jobs.classというファイルと、Engineer.classというファイルが作成される。

今回の場合、何かを行うわけではないので(コンソールに表示したりとか)、「無事コンパイルできました」というところで話は一区切りとなる。
$javac Jobs.java Engineer.java
としてもよいが、Engineer.javaだけでも同じこと。

コンパイルが失敗する例

コンパイルできない例も書いておく。

Jobsクラスは以下のようにする。(フィールドは何も宣言しない。)
//Jobs.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Jobs{
}
Engineerクラスは同じ。(だけどもう一度書いておく。)
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extends Jobs{
  Engineer(){
    salary = 50;
  }
}
これで、同じく
$javac Engineer.java
と打つ。

そうすると、以下のようなエラーが吐かれる。
Engineer.java:5: エラー: シンボルを見つけられません
    salary = 50;
    ^
  シンボル:   変数 salary
  場所: クラス Engineer
エラー1個
salaryという変数は親クラスでも子クラスでも宣言されていないからだ。

余談

本題とは少し関係ないが、やらかした凡ミスも書いておく。

本当に初歩の初歩のミスだが、extendsのところをsを抜かしてextendにしてしまってコンパイルできなかったことがあった。
//Engineer.javaというファイル名にする。
//クラス名とファイル名は同じにしなければいけない。
public class Engineer extend Jobs{
  Engineer(){
    salary = 50;
  }
}
これでコンパイルをしようとすると以下のようなエラーが出される。
Engineer.java:1: エラー: '{'がありません
public class Engineer extend Jobs{
                     ^
エラー1個

2014年4月12日土曜日

エラーコード

先日、ずっと放置してきたソフトのエラーに向き合った。

C/C++の統合開発環境 BCCdeveloper をダウンロードしたものの、コンパイルが出来ないのだ。

腰を据えて向き合ってはみたものの、解決しなかったので、ネット上で質問をしてみた。

しかし、質問の仕方が悪かったらしく、重要な点を伝え忘れてしまったので、アドバイスをもとに再び向き合ってみたが、エラー修正ができなかった。




ちなみに出てくるエラーコードはこれ。


> C:\borland\bcc55\Bin\make.exe -fDebug\test.mak Debug\test.res
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
     brc32  -r -foDebug\test.res C:\Users\hiroshi\Documents\program\test\test.rc
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.

Error test.rc 7 10: Cannot open file: stdio.h

** error 20018 ** deleting Debug\test.res

Compile End !! (Elapsed time 0:01.779)


ネットなどで調べながら、幾つか原因を探ってみた。


1.まずコンパイラ単独では以前から使用していたが、改めてコンパイラ単独では正常に動くかどうか確認したところ、これは問題なく動いた。
だから、原因はIDEの方にあるのだろう。

2.環境変数もチェックしてみた。


4.readme.txtに書いてある内容の確認
readme.txtに従い、
にあるbcc32.cfgの中身が
-I"c:\borland\bcc55\include"
-L"c:\borland\bcc55\lib"
(念のために\bcc55のあとに\binもつけて試してもみた。)

ilink32.cfgの中身が
-L"c:\borland\bcc55\lib"
であること。(念のために\bcc55のあとに\binもつけて試してもみた。)



そんなわけでIDEをインストールしてからというものの、これが使えないおかげで、プログラムをしていなかったのだが、よく考えたらコンパイラ単独では仕えるわけだし、その他の言語はまた別問題なのだから、このエラーは後回しにしてもよいかなと思ってきた。

のんびりやろうと思う。

分かる人いたら教えてください。