Saturday, December 30, 2006

Eclipse 3.2.1 with CDT installation notes

1.下載eclipse 3.2.1 解壓後的檔案放到任意位置(如:c:\program files\),雙擊eclipse.exe運行
2.下載 cdt 套件org.eclipse.cdt.sdk-3.1.1-win32.x86.zip
或簡裝版org.eclipse.cdt-3.1.1-win32.x86.zip
3.解壓後有feature 和 plugins 將 其中所有檔案移到 eclipse 安裝目錄features 和 plugins內.
4.sourceforge 下載MinGW5.x(2006/12) 官方站www.mingw.org為3.x版且其它gcc windows32 API 等需分開下載及安裝. MinGW5.x可一次安裝所要的libray 和 include files.
5.在windows 加入path c:\MinGW\bin
6.改c:\mingw\bin\mingw32-make.exe 為c:\mingw\bin\make.exe
7.在eclipse 必需以Managed xxxx 形式開Project, 再在其中加入source file

簡單測試:
在DOS下運行gcc 若收到 no input files 即表示compiler 工作常
運行make 收到 *** no targets specified and no makefile found. Stop 即make工作常
試在eclipse 中做hello world project 無error即可

安裝MinGW5後令DEV-CPP出問題, 解決方法見前一個post

DEV-CPP:: [Linker error] undefined reference to `__cpu_features_init'

在為ECLIPSE 3.2.1 安裝CDT( c/c++ develop tools) 的MinGW5.x 後, DEV-CPP編譯出現以下問題,無法編譯.
=====================
Compiler Output:
---------------------
[Linker error] undefined reference to `__cpu_features_init'
ld returned 1 exit status

Compiler Log:
----------------------
Compiler: Default compiler
Executing g++.exe...
g++.exe "C:\Documents and Settings\user\My Documents\New Folder\hello.cpp" -o "C:\Documents and Settings\user\My Documents\New Folder\hello.exe" -g3 -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -g3
/mingw/lib/crt2.o:crt1.c:(.text+0x16a): undefined reference to `__cpu_features_init'
collect2: ld returned 1 exit status

Execution terminated
=======================
其中 : ...-L"C:\Dev-Cpp\lib" -g3 /mingw/lib/crt2.o:crt1.c:(.text+0x16a): undefined reference to `__cpu_features_init'
懷疑新裝MinGW5 library 與 dev-cpp 不兼容. dev-cpp 中所有Package 除Windows32API外升至最新版.
更改Dev-CPP設置, Tools->Compiler Options->Directories->Libraries
原c:\Dev-Cpp\lib 外加入 新install 的MinGW的路徑 c:\mingw\lib 移至最上,暫時解決問題.
版本資料
DEV-CPP 5 (4.9.9.2)
GCC/G++ 3.4.2
GNU Make 3.80.0.3
MinGW runtime 3.9
Windows32 API 3.6 (current 3.8)

Sunday, December 24, 2006

Java Notes::Basic of Class, Var. and Method

參考:
Java 基礎教程
耿祥義 著
清華大學出版社
isbn 7-302-09142-0
一、類Class
1.類聲明
2.類體

例子:
class ClassName //類名
{ //類體
.....
}; //由class 開始到本行為類聲明.

類體可分成兩部份:1.變量定義 2.方法定義
例子:
class Square
{
int num_side; //變量定義
float area; // 成員變量

float calc_area_method(int local_var1) //方法定義
{
float local_var2;
};
}; //End of ClassName

二、變量:
在變量定義部份所定義的變量稱為『類的成員變量』如 num_side, area
而在方法體中的稝稱為局部變量,如 lcoacl_var1, local_var2
有效範圍: 成員變量在整個變量都有效, 而局部變量只在定義它的方法有效.

成員變量又分為『實例成員變量』(實例變量) 和 『類成員變量』(類變量/靜態成員變量)
例子:
class Animal
{
int legs; //實例變量
static int head; //類變量, 加 static
..............
};

三、方法:
語法格式
Method Overload
constructor

與變量相似,方法可分為『實例方法』與『類方法』
class ClassName
{
int var1;
static float var2;
float method1() // instant method
{

};
static int method2() // class method or static method
{

};
}; //end of ClassName


四、Object(物件、對象)
語法:
ClassName objectName;
objectName = new ClassName( ); //此處 ClassName( ) 為 default 的 constructor.
//若帶有arguments 則為對應之constructor.
寫成一句的形式:
ClassName objectName = new ClassName( );

Object的建立與內存分配:
當運行ClassName objectName 時系統在內存中建立了一個單元,名為objectName其中不包括任何數據.亦即没有任何"實體".
而運行到objectName = new ClassName( ); 系統建立Object分配各個成員變量的內存和初值,返回一個"引用",也就是返回一個地址(代表這些成員變量內存的首地址)給objectName.
建立多個Object,則各自有自己的引用.

五、static 的說明
當Java程序開始運行時,類的byte code載入內存,
類變量(static)則會分配內存,但若該類没有創建object,則該類的實例變量不會被分配內存.每當新建objects各自建立實例變量且互不相同,共享類載入的類變量,類變量佔用內直至程序結束,任何的改變則會影響其它object.
實例方法與類方法比較與上述相似,類實例方法在byte code載入時若未建立任何object則不會為其分配入口地址,直到建立了第一個object,注意,其後建立的object共享第一個
入口地址而不用再分配.對於類方法,類載入時即獲得分配地址,不論是否有相應的object.
從而,static method何以不用在建立物件前即可以以 ClassName.staticMehtod的形式調用.