[リストへもどる]
一括表示
タイトル構造体配列の使い方について教えて下さい
記事No89
投稿日: 2006/05/03(Wed) 14:12
投稿者営々
こんにちは。おかげさまで日記鯖cpx登録できました。誠にありがとうございます。

別のcpxで、ひと月ごとに分割されたWEB日記のバックナンバーURLを、WEB日記一覧ページから取得して、構造体配列に格納しようと試みています。

構造体定義セクション
===========================
// インデックスページから各ページのURLを取得するために使用する構造体

typedef struct {
// DWORD dwYear; // 年
// DWORD dwMonth; // 月
// DWORD tmStart; // そのページに含まれる一番古い発言の日時
String::String stURL; // ページのURL
String::String stYearMonth; // 年+月
} TPdataFromIndex;
===========================


受信処理セクション

===========================
// インデックスページから各ページのURLを取得する
char *pattern ="<th><a href=\"\diary(\d{4})\.html\">"; // 切り出しパターン
if ((cPageURL = m_pICmnPilot->cmnRegSearch (pPage, pattern, "g")) == 0)
return FALSE;

// -----------------------------------------------
// 各月ごとのページを表すURLを収めた構造体配列を作成
// TPdataFromIndex PdataFromIndex[cPageURL];

struct TPdataFromIndex *PdataFromIndex = m_pICmnPilot->cmnAlloc ( sizeof(struct TPdataFromIndex) * cPageURL );
if( PdataFromIndex == NULL ) {
m_pICmnPilot->cmnSetError ("構造体配列メモリ確保エラー");
return FALSE;
}
===========================

こう書いてコンパイルすると、「"sizeof"は、未定義の型には使用できません」というエラーが出てしまいます。
独力では解決できそうにないので、ご助言などいただけたら助かります。
よろしくお願いします。

タイトルRe: 構造体配列の使い方について教えて下さい
記事No90
投稿日: 2006/05/03(Wed) 14:42
投稿者うぇいく   <weyk@nifty.com>
TPdataFromIndexは、構造体の名前ではなく、型名ではないでしょうか?そうすると、sizeof(struct TPdataFromIndex)ではなく、sizeof(TPdataFromIndex)になるのではないかと思います。
もしくは、宣言を
typedef struct TPdataFromIndex {
    String::String stURL;          // ページのURL
    String::String stYearMonth;       // 年+月
}    TPdataFromIndex;
とするとか。
# 未確認。たしか、名前空間が違うので同名で定義できたような気が。
-- CMN v0.50aβ --

タイトルRe2: 構造体配列の使い方について教えて下さい
記事No91
投稿日: 2006/05/03(Wed) 15:53
投稿者営々
うぇいくさん、レス有難うございます。

構造体変数と構造体の型名の概念をごっちゃにしていました。
型名がないとsizeofでサイズ計れませんよね…

宣言を
>typedef struct TPdataFromIndex {
>    String::String stURL;
>    String::String stYearMonth;
>}    TPdataFromIndex;

に変更して

>struct TPdataFromIndex *PdataFromIndex = (struct TPdataFromIndex*) m_pICmnPilot->cmnAlloc ( sizeof(struct TPdataFromIndex) * cPageURL );

でメモリ確保したらうまく行きました。
ありがとうございました。
==============================================
営々(ZAP06352)
==============================================

タイトルRe3: 構造体配列の使い方について教えて下さい
記事No93
投稿日: 2006/05/04(Thu) 15:42
投稿者営々
エウレカ! 分かった、分かったぞ!

構造体配列をcmnAllocで確保したときにはmemsetで初期化してやる必要があるんだ。

memset (PdataFromIndex, 0, sizeof(struct TPdataFromIndex) * cPageURL );

今日一日これで悩んでました(^^;)ヾ
==============================================
営々(ZAP06352)
==============================================