全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2091
推到 Plurk!
推到 Facebook!

define與結構陣列大小一問

尚未結案
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-12 18:40:27 IP:140.130.xxx.xxx 訂閱

[code cpp]
#include
#pragma hdrstop
#include "Unit1.h"

#define blockwidth Form1->RadioGroup1->Items->Strings[Form1->RadioGroup1->ItemIndex]
#define blocklen Form1->RadioGroup1->Items->Strings[Form1->RadioGroup1->ItemIndex]

struct arraytype {
double sum[blockwidth][blocklen];
double num;
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption=blockwidth;
Label2->Caption=blocklen;
}
[/code]

各位前輩安~
上面程式碼第5與第6行是預定義的2個變數blockwidth和blocklen
在Form1中使用1個RadioGroup、1個button、2個Label
RadioGroup的Itesms內有512與16384

Compiler時卻出現以下訊息...
[C Error] Unit1.cpp(9): E2313 Constant expression required

如果那個結構陣列內的陣列大小沒有使用到blockwidth、blocklen這2個變數是可以正常顯示的
不過因為一定要使用到那個結構陣列,所以不知道有什麼方法可以解決現在的問題?
若表達不夠好,請見諒。
------
hello!!
編輯記錄
quzo1688 重新編輯於 2008-11-12 18:40:55, 註解 無‧
quzo1688 重新編輯於 2008-11-12 18:41:26, 註解 無‧
quzo1688 重新編輯於 2008-11-12 18:41:41, 註解 無‧
quzo1688 重新編輯於 2008-11-12 18:42:51, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-12 18:55:05 IP:118.169.xxx.xxx 訂閱
錯誤訊息已經告訴你
double sum[blockwidth][blocklen];
其中的
blockwidth以及blocklen必須是constant
若你的sum維度是不固定的變數,那必須動態配置記憶體
如何動態配置記憶體,可以搜尋站上的文章
編輯記錄
taishyang 重新編輯於 2008-11-12 19:45:14, 註解 增加變數這兩個字‧
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-12 19:32:49 IP:140.130.xxx.xxx 訂閱
taishyang前輩你好:
因為教授要求程式在一開始時就可以選擇它的區塊大小(512或16384)
再利用那個大小去配置陣列和供給其他函式使用。
而動態配置在這裡可能不太需要︿︿"

===================引 用 taishyang 文 章===================
錯誤訊息已經告訴你
double sum[blockwidth][blocklen];
其中的
blockwidth以及blocklen必須是constant
若你的sum維度是不固定的,那必須動態配置記憶體
如何動態配置記憶體,可以搜尋站上的文章

------
hello!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-12 19:44:03 IP:118.169.xxx.xxx 訂閱
這樣的要求就是要用動態配置
因為在編譯的時候並不知道blockwidth和blocklen是多少
並不是你想的那樣 ^_^


===================引 用 quzo1688 文 章===================
taishyang前輩你好:
因為教授要求程式在一開始時就可以選擇它的區塊大小(512或16384)
再利用那個大小去配置陣列和供給其他函式使用。
而動態配置在這裡可能不太需要︿︿"


herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-12 19:56:19 IP:211.72.xxx.xxx 訂閱
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-13 02:31:51 IP:125.224.xxx.xxx 訂閱
herbert2前輩你好:
我看你所回覆之連結,我還是意會不出來@@"


===================引 用 herbert2 文 章===================
請參考:
http://delphi.ktop.com.tw/board.php?cid=168&fid=1499&tid=95521
------
hello!!
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-13 02:44:53 IP:125.224.xxx.xxx 訂閱
taishyang前輩你好:

我還是不太了解你的意思。
前輩你所指的動態配置,我想到的是類似這樣↓

[code cpp]
#define blockwidth (int *)malloc(sizeof(int))
#define blocklen (int *)malloc(sizeof(int))
[/code]

不過我想應該不是我這個意思︿︿"
可否請taishyang前輩舉一個例子呢?


===================引 用 taishyang 文 章===================
這樣的要求就是要用動態配置
因為在編譯的時候並不知道blockwidth和blocklen是多少
並不是你想的那樣 ^_^




------
hello!!
編輯記錄
quzo1688 重新編輯於 2008-11-13 02:45:47, 註解 無‧
quzo1688 重新編輯於 2008-11-13 02:46:19, 註解 無‧
quzo1688 重新編輯於 2008-11-13 02:48:29, 註解 無‧
quzo1688 重新編輯於 2008-11-13 02:49:25, 註解 無‧
quzo1688 重新編輯於 2008-11-13 02:51:07, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-13 10:33:20 IP:118.169.xxx.xxx 訂閱
不知您搜尋站上資料了嗎?
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=81501
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-13 17:54:35 IP:125.224.xxx.xxx 訂閱
To: taishyang 前輩:
這篇很熟悉~我ㄧ開始就是從這篇來改blockwidth和blocklen後面定義的部分
可能沒有看的很仔細,感謝前輩。我會繼續仔細再看過。

===================引 用 taishyang 文 章===================
不知您搜尋站上資料了嗎?
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=81501
------
hello!!
quzo1688
一般會員


發表:2
回覆:8
積分:2
註冊:2008-11-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-11-13 22:50:23 IP:125.224.xxx.xxx 訂閱
[code cpp]
#define blockwidth StrToInt(Form1->RadioGroup1->Items->Strings[Form1->RadioGroup1->ItemIndex])
#define blocklen StrToInt(Form1->RadioGroup1->Items->Strings[Form1->RadioGroup1->ItemIndex])

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int **a = new int*[blockwidth];
for(int i=0;i {
a[i] = new int[blocklen];
for(int j=0;j < blocklen;j )
a[i][j]=0;
}
a[0][0]='1';
Label1->Caption=a[0][0]; //test

for (int i=0;i delete[] a[i];
delete[] a;
}

[/code]

上面code根據板上的資源所改的,現在此種方式ok
不過在更改成結構陣列方式就一推錯誤...
請問各位前輩~要怎麼改成結構陣列的動態配置?
因為其他變數和函式也會用到,所以想改成結構的方式。
------
hello!!
編輯記錄
quzo1688 重新編輯於 2008-11-13 22:51:22, 註解 無‧
系統時間:2024-03-29 3:15:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!