2009年4月29日 星期三

error LNK2019的解決一例

在編譯W32的DLL的程式時,意外的出現error LNK2019: 無法解析的外部符號 "public: int __thiscall WavFile::FreeWaveData(struct WaveDataArray *)這一類的錯誤訊息,百般檢查程式的確是沒有錯誤的地方啊~~後來去爬了一下,有人提到VC++對於template的編輯支援的問題,由此template的程式必須要編譯二次,VC++似乎沒有支援,於是我將原本來.CPP檔中的程式主體搬到.H檔案中,放至宣告後面,這個問題就解決了。

2009年4月24日 星期五

[C++ ][原創]使用new動態配置二維陣列

在以往C++語言的環境下,一般想要動態的配置一個二維的陣列,必須先配置出一個一維陣列的指標,再將每一小塊的陣列配給那個指標。

int** a = new int*[b];
for (int i=0;i++)
a[i] = new int[10];






for (int i=0;i++)
delete[] a[i];
delete[] a;

但是這樣的配置記憶體是不連續的,而且要刪除時也很麻煩,必須先把每一欄的記憶體刪除,在去刪除指標陣列,現在有個方法可以直接使用new來完成一次配置,當然,也可以一次把記憶體刪除,且記憶體是連續的方便管理。
int (*a)[10] = new int[b][10];

delete[] a;
根據C與C++的規範,宣告成空陣列時,Column一定要有值,也就是說必須讓編輯器知道要多大的記憶體塊,好讓你可以runtime的去配置記憶體,所以就可以宣告成指向固定記憶體塊{(*int)[10]}的指標,再用new去配置那塊記憶體即可,a這個值就會是一個二維陣列的位置,且可以動態的被配置出來,且刪除時也較方便。