• 締切済み

構造体をポインターに入れたい

hashioogiの回答

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.2

(1) 初期化時の{}が多すぎます。 以下でいいです。 static struct str state_ab[60][4] = { { {"いちご" }, { "みかん" }, { "レモン" }, { "ブドウ" } }, { { "" }, { "" }, { "" }, { "" } }, }; (2) ポインタへの代入 関数state_ab_f_read()内でポインタpにstate_ab、state_ab2、state_ab3を代入していますけど、これはできません。pが一次元配列のアドレスしか代入できないからです。 二次元配列用のポインタも定義できますけど、今回は[60][4]と[60][8]の2種類ありますので使用できません。 多次元配列のポインタに関しては以下を参照。 http://questionbox.jp.msn.com/qa8571161.html

mana5867
質問者

お礼

回答ありがとうございます <初期化時の{}が多すぎます。 それは私も書いている時に思いました。 修正してみます。 <二次元配列用のポインタも定義できますけど、今回は[60][4]と[60][8]の2種類ありますので使用できません。 今回も一時配列用でもできると思ったのですが、実はこれは多次配列なのですね

mana5867
質問者

補足

構造体をポインターに入れることが不可能ならこれが正解でよろしいですか? struct str{   char *name; }; static struct str state_ab[60][4] = {   { { "いちご" }, { "みかん" }, { "レモン" }, { "ブドウ" } },   { { "" } , { "" } , { "" } , { "" } } }; static struct str state_ab2[60][8] = {   { { "きゅうり" } , { "セロリ" } , { "じゃがいも" }, { "にんじん" }, { "たまねぎ" }, { "ニンニク" }, { "レタス" }, { "キャベツ" } },   { { "" } , { "" } , { "" } , { "" } , { "" } , { "" } , { "" } , { "" } } }; static struct str state_ab3[60][4] = {   { { "牛肉" }, { "豚肉" }, { "鶏肉" }, { "魚肉" } },   { { "" } , { "" } , { "" } , { "" } } }; char *state_ab_f_read( int mode , int num1 , int num2 ){   switch( mode ){     case 0: return state_ab[ num1 ][ num2 ].name; break;     case 1: return state_ab2[ num1 ][ num2 ].name; break;     case 2: return state_ab3[ num1 ][ num2 ].name; break;   }   return NULL; }

関連するQ&A

  • 構造体自体をポインターに入れたい

    構造体自体をポインターに入れて、ポーンターから位置をずらして表示したいものを表示したいのですが、どのようにすればよろしいでしょうか? 現在下記のように書いていますがコンパイルエラーになります static struct{  char *name; //名前  int num; //数 }eat1[5] = {  { "もも" , 1 },  { "みかん" , 2 }, }; static struct{  char *name; //名前  int num; //数 }eat2[5] = {  { "きゅうり" , 1 },  { "ナス" , 2 }, };  int *p;  int mode = 2;  int i;  switch( mode ){   case 1: p = &eat1;   case 2: p = &eat2;  }  for( i = 0; i < 5; i++; ){   printf( "%d\n" , p[i].num );  } エラー内容 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\bese_item_cd.cpp(303) : error C2440: '=' : '<unnamed-type-eat1> (*)[5]' から 'int *' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\bese_item_cd.cpp(304) : error C2440: '=' : '<unnamed-type-eat2> (*)[5]' から 'int *' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\bese_item_cd.cpp(307) : error C2059: 構文エラー : ';' c:\documents and settings\user\my documents\visual studio 2008\projects\kami\bese_item_cd.cpp(308) : error C2228: '.num' の左側はクラス、構造体、共用体でなければなりません 型は 'int' です。

  • Visual C++のサンプルプログラムを入力時

    Visual C++のサンプルプログラム(CD付属ソースから)を入力・コンパイル時のエラー すみません、教えてgoo初心者なもので、返信感覚で回答者にお礼を書いていたら再質問の順序等訳がわからなくなってしまったので新規に質問します。 前回質問:http://okwave.jp/qa/q6315455.html 猫でもわかるゲームプログラミングhttp://www.kumei.ne.jp/c_lang/index.htmlという本で勉強しようとしています。 本の巻末に書いてある通り、プロジェクトを新規作成でWindowsアプリケーション、空のプロジェクトで始め、サンプルのソースをコピー&ペーストで貼り付けたんですが、 1>new1.cpp 1>c:\documents and settings\REI\my documents\visual studio 2008\projects\new1\new1\new1.cpp(58) : error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>c:\documents and settings\REI\my documents\visual studio 2008\projects\new1\new1\new1.cpp(85) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>ビルドログは "file://c:\Documents and Settings\REI\My Documents\Visual Studio 2008\Projects\new1\new1\Debug\BuildLog.htm" に保存されました。 1>new1 - エラー 2、警告 0 となります。すみません、ソースは文字数の関係でUPできないのですが、 これでは苦労してプログラム入力したとしても悉く実行できないってことですよね。 どなたか分かる方いましたらご回答ください。

  • このエラーの対処法を教えて下さい。

    Visual C++ 2005 Express Edition で、DXライブラリを使ったプログラムをコンパイルすると、 「kamakiri1.cpp(206) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\documents and settings\□\my documents\visual studio 2005\projects\newgame\kamakiri1.cpp(21)' で見つかる前に EOF が検出されました。」と出たのですが、これはどういうエラーなんでしょうか。

  • VC++ 2008で別classからFormがincludeできません

    お世話になります。 タイトルの通り、別ソースで書いてあるクラスでForm1のincludeができません。includeすれば、そのclassの型が使用できるという認識なのですが、何か他にしなければならない事があるのでしょうか…。 環境はVisual C++ 2008 Express Editionです。 以下、ソースです。 [Form1.h] #pragma once #include "testclass.h" namespace testAppli { (略) private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { testclass *aaa = new testclass(); aaa->testfunc(this); } [testclass.h] #pragma once #include "stdafx.h" #include "Form1.h" class testclass { public: void testfunc(Form1^ aaa); }; [testclass.cpp] #include "stdafx.h" #include "testclass.h" void testclass::testfunc(Form1^ aaa) { return; } 以下のコンパイルエラーが出ています。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2065: 'testclass' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2065: 'aaa' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2061: 構文エラー : 識別子 'testclass' 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2065: 'aaa' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2227: '->testfunc' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 1> 型は ''unknown-type'' です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\testclass.h(8) : error C2061: 構文エラー : 識別子 'Form1' 1>.\testclass.cpp(4) : error C2065: 'Form1' : 定義されていない識別子です。 1>.\testclass.cpp(4) : error C2065: 'aaa' : 定義されていない識別子です。 1>.\testclass.cpp(5) : error C2448: 'testclass::testfunc' : 関数の定義が間違っています。 1>testAppli.cpp 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\testclass.h(8) : error C2061: 構文エラー : 識別子 'Form1' 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2660: 'testclass::testfunc' : 関数に 1 個の引数を指定できません。

  • Visial C++におけるプログラミング

    Visial C++ 2008を使用したプログラミングについてです。 学校の課題をやるためやむなくVisial C++2008を使用していて 学校では実行が出来たのに家では出来ませんでした。 ソースファイルは以下のとおりです。 #include <stdio.h> #include <stdlib.h> #include <time.h> /*構造体宣言*/ struct Students{ int N; int A; int B; int C; }; int main(void){ struct Students std[50]; /*構造体型配列*/ int i,N,A,B,C,num,scannum; srand((unsigned)time(NULL)); /*乱数の初期化*/ FILE *file; /*ファイルのポインタを用意*/ file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/ /*ファイルのオープンチェック*/ if(file==NULL){ fprintf(stderr,"cannnot open file 'Data.txt'\n"); exit(1); } /*Studentsにデータを格納*/ for(i=0;i<=49;i++){ fscanf(file,"%d%d%d",&N,&A,&B); std[i].N=N; std[i].A=A; std[i].B=B; std[i].C=70+(rand()/(RAND_MAX+1.0)*31); /*表示*/ printf("学籍番号:%d.",std[i].N); printf("科目A:%d.\n",std[i].A); printf("科目B:%d.\n",std[i].B); printf("科目C:%d.\n",std[i].C); } fclose(file); return 0; } エラーとしては 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2275: 'FILE' : この型は演算子として使用できません 1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(69) : 'FILE' の宣言を確認してください。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : warning C4047: '=' : 間接参照のレベルが 'int' と 'FILE *' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : warning C4047: '==' : 間接参照のレベルが 'int' と 'void *' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4024: 'fscanf' : の型が 1 の仮引数および実引数と異なります。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(36) : warning C4244: '=' : 'double' から 'int' への変換です。データが失われる可能性があります。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4024: 'fclose' : の型が 1 の仮引数および実引数と異なります。 1>ビルドログは "file://c:\Documents and Settings\devil\My Documents\Visual Studio 2008\Projects\テスト\テスト\Debug\BuildLog.htm" に保存されました。 と表示されます。FILEの宣言をしているのになんで確認してください と出るのでしょうか。。。。解決にご協力お願いします。m(__)m

  • 本に従ってビルドを進めていったつもりが・・失敗;

    ------ ビルド開始: プロジェクト: D3DFWsamplw, 構成: Debug Win32 ------ コンパイルしています... Renderer.cpp c:\dx90sdk\include\d3d9.h(33) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Scene.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\scene.cpp(6) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory Window.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\window.cpp(8) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory コードを生成中... ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\D3DFWsamplw\D3DFWsamplw\Debug\BuildLog.htm" に保存されました。 D3DFWsamplw - エラー 3、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== とでてしまいます、これだけみてなにが悪いのか誰か説明できるひといませんか?初心者なんですいません;

  • c++によるエラー

    ここ(http://japan.maxim-ic.com/products/ibutton/software/1wire/wirekit.cfm)のサイトの、1-Wire Public Domain Kit + examples + all link files + assembly language files これをDLし、その中にあるThermoを実行したいのですが、エラーが出てしまいます。 ソースファイルに Thermodl.c , Thermoms.c ヘッダーファイルに findtype.h , ownet.h , thermo21.h を入れてあります。 これを実行すると、以下のエラーが出てしまいます。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : ')' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : '{' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : '型' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : ')' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(114): warning C4013: 関数 'PrintResults' は定義されていません。int 型の値を返す外部関数と見なします。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(145): error C2371: 'PrintResults' : 再定義されています。異なる基本型です。 1> 1>ビルドに失敗しました。 visual studio2010の製品版を使っています。どのように修正すればよいでしょうか。 教えてください。

  • DirectXのエフェクトをやりたくて・・・

    VisualStudio2005 ExpressEditionを用いてプログラミングの初歩をやろうとしているんですが・・DirectXSDKをつかったエフェクトを作るときなぜかインクルードファイルとライブラリファイルのところにのところにDirectXSDKのファイルを追加しただけではエラーが出てしまいます。パスもしっかりとしたはずなんですがなんででしょうか?過去ログ見てもわかりませんでした; ------ ビルド開始: プロジェクト: D3DFWsamplw, 構成: Debug Win32 ------ コンパイルしています... Renderer.cpp c:\dx90sdk\include\d3d9.h(33) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Scene.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\scene.cpp(6) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory Window.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\window.cpp(8) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory コードを生成中... ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\D3DFWsamplw\D3DFWsamplw\Debug\BuildLog.htm" に保存されました。 D3DFWsamplw - エラー 3、警告 0

  • Visual C++のビルドで

    こんにちは。VC++の初心者です。 今MFCアプリケーションでシングルドキュメントで「ユニコードライブラリをしようする」をチェックなしで簡単なプログラムを作ったのですが、HelloVCView.cppファイルの中で、 void CvdclsView::OnDraw(CDC* pDC)  //■変更 /*pdc*/ → pDC { ・・・   pDC->TextOut(0,0,"Hello,VC++"); }     と本に書いてあるとおり変更して、ビルドしたところ、 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(51) : error C3872: '0x3000': この文字を識別子で使用することはできません 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(52) : error C3646: '    ' : 不明なオーバーライド指定子です といった表示がでてしまい、ビルドできません。最初のほうはこれでビルドできたのですが、最近になってこのように新しく作ってビルドするとこのような表示が出てしまいます。このエラー表示をダブルクリックしたら上のOnDraw関数のところに移動しました。設定の箇所をいじったつもりはないのですがもしかしたらそのようなミスがあったかもしれません。 この0x3000とは何でしょうか?どのようにすればこのような問題が解決するのでしょうか。変な質問かもしれませんが、よろしくお願いします。 ちなみにVisual Studio 2005 Academic Editionを利用しています。

  • エラーがでるようになりました。

    vs2005を使っているんですが、 「c:\documents and settings\rm\my documents\visual studio 2005\projects\o.c\o.c.cpp(17) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?」 というわけの分からない表示が出ました。 どのプログラムも実行できず、この表示が出ます。 急にそうなったんですが、特別なことをした覚えはありません。