• 締切済み

'.GetSize' : 左側がクラス、構造体、共用体ではありません。

int nData[10]; と配列作ったとき、要素数が10個っていうのを取り出すには どうすれば良いでしょう? int x=nData.GetSize(); //タイトルのようにエラーとなります。 x=Sizeof(nData)/4; //intなので4byteで割った・・・。あはは。 基本的な事柄でスミマセンが出てきません。宜しくお願いします。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

正確には、 size_t x = sizeof nData / sizeof nData[0]; ですね。 C++であれば、 template <typename T, std::size_t N> std::size_t lengthof(T (&array)[N]) {  return sizeof array / sizeof(T); } という関数を作っておくと便利でしょう。 Cの場合、類似のマクロを作ることもできますが、配列ではなく(間違って)ポインタを渡してしまってもコンパイルエラーにできないので、あまり安全とはいえません。 一応参考までに書いておくと、 #define lengthof(array) (sizeof(array) / sizeof(array)[0]) といった感じです。

Passerby01
質問者

お礼

CARRAYって宣言してGetSizeでとってこれるから簡単ジャンと思ってたら 配列だと「'.GetSize' : 左側がクラス、構造体、共用体ではありません。」 ありゃ? と右往左往しておりました。 全体のサイズを一個目のサイズで割ってあげればよかったんですね。 いろんな書き方があるんですね。勉強になります。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

int n = (sizeof nData) / sizeof nData[0];

Passerby01
質問者

お礼

ありがとうございます。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

x=Sizeof(nData)/sizeof(int); で良いかと思います。 しかし10という値は自分で設定しているわけですから #define ARRAY_SIZE 10 int nData[ARRAY_SIZE]; としておけば、 x = ARRAY_SIZE; でいいはずです。 javaの配列なんかだと.lengthで要素数がとれますが cの配列はそんなことは出来ません。

Passerby01
質問者

お礼

的確なご回答ありがとうございます。 そうですよね。最初に定義しときゃ、後で変更するとき その部分だけ変えれば、済むんですよね・・・。

関連するQ&A