• 締切済み

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

構造体をポインターに入れたいのですがうまくいきません どうしたら入れることができますか? ―――ソース――― 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 ){   struct str *p;   switch( mode ){     case 0: p = state_ab; break;     case 1: p = state_ab2; break;     case 2: p = state_ab3; break;   }   return p[ num1 ][ num2 ].name; } ―――エラー内容――― c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(237) : error C2440: '=' : 'str [60][4]' から 'str *' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(238) : error C2440: '=' : 'str [60][8]' から 'str *' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(239) : error C2440: '=' : 'str [60][4]' から 'str *' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(241) : error C2676: 二項演算子 '[' : 'str' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照) c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(241) : error C2228: '.name' の左側はクラス、構造体、共用体でなければなりません ビルドログは "file://c:\Documents and Settings\USER\My Documents\Visual Studio 2008\Projects\kami\Debug\BuildLog.htm" に保存されました。

みんなの回答

回答No.7

// たびたび王次郎です struct str{ char *name[2] ; } ; static struct str state_ab[4] = { { "いちご" , "" } , { "みかん" , "" } , { "レモン" , "" } , { "ブドウ" , "" } , } ; static struct str state_ab2[8] = { { "きゅうり" , "" } , { "セロリ" , "" } , { "じゃがいも" , "" } , { "にんじん" , "" } , { "たまねぎ" , "" } , { "ニンニク" , "" } , { "レタス" , "" } , { "キャベツ" , "" } , } ; static struct str state_ab3[4] = { { "牛肉" , "" } , { "豚肉" , "" } , { "鶏肉" , "" } , { "魚肉" , "" } , } ; // その1:str配列の先頭アドレスをpに渡す char *state_ab_f_read_1( int mode , int num1 , int num2 ){ struct str *p=NULL ; switch( mode ){ case 0: p = state_ab ; break; case 1: p = state_ab2 ; break; case 2: p = state_ab3 ; break; } return p[num1].name[num2] ; } // その2:strのアドレスをpに渡す char *state_ab_f_read_2( int mode , int num1 , int num2 ){ struct str *p=NULL ; switch( mode ){ case 0: p = &state_ab[num1] ; break; case 1: p = &state_ab2[num1] ; break; case 2: p = &state_ab3[num1] ; break; } return p->name[num2] ; } // もし、num1 と num2 の使い方が逆の場合は入れ替えてください // 以上

回答No.6

毎度、王次郎です これでいかがでしょうか? C++でなければ(classが嫌なら)、構造体と初期化関数にすれば同じことができますが、 その場合は構造体を使うメリットがないと思いますが。 構造体というのは、メモリ上のデータ構造を規定しておく構文なので、 配列が60なのか80なのか事前に決めなくてはいけません。 下の回答の例では、構造体(というかclass)の宣言でchar型の2階のポインタを メモリ上に確保しておいて、実際の配列はコンストラクタ内で確保しています。 classを使うことのメリットは、コンストラクタ(str::str)でメモリ確保の仕方を定義できる 点にあります。そしてデストラクタ(str::~str)で変数を使い終わったときのメモリの開放を 自動的に行えます。 //--------------------------------------------------------------------------- #include <string.h> class str { public : str( char *strA , char *strB , int nSize ) ; ~str( ) ; char **p ; } ; str::str( char *strA , char *strB , int nSize ) { p = new char*[2] ; p[0] = new char[nSize] ; p[1] = new char[nSize] ; strcpy( p[0] , strA ) ; strcpy( p[1] , strB ) ; } str::~str( ) { delete[] p[0] ; delete[] p[1] ; delete[] p ; } class str state_ab[4] = { str( "いちご" , "" , 60 ) , str( "みかん" , "" , 60 ) , str( "レモン" , "" , 60 ) , str( "ブドウ" , "" , 60 ) , } ; static str state_ab2[8] = { str( "きゅうり" , "" , 80 ) , str( "セロリ" , "" , 80 ) , str( "じゃがいも" , "" , 80 ) , str( "にんじん" , "" , 80 ) , str( "たまねぎ" , "" , 80 ) , str( "ニンニク" , "" , 80 ) , str( "レタス" , "" , 80 ) , str( "キャベツ" , "" , 80 ) , } ; static str state_ab3[4] = { str( "牛肉" , "" , 60 ) , str( "豚肉" , "" , 60 ) , str( "鶏肉" , "" , 60 ) , str( "魚肉" , "" , 60 ) , } ; char *state_ab_f_read( int mode , int num1 , int num2 ) { class str *s=NULL ; switch( mode ){ case 0: s = state_ab ; break; case 1: s = state_ab2; break; case 2: s = state_ab3; break; } if( s == NULL ) { return NULL ; } return s[ num1 ].p[ num2 ] ; }

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.5

#1です。ちょっと落ち着いて、コードを書いてみました。 構造体の中の文字列はこちらのデバッグ環境の都合で変更しましたので、適当に中身を変えてください。 struct str { char *name; }; struct str state_ab[60][4] = { { "A001", "A002", "A003", "A004" }, { "", "", "", "" } }; struct str state_ab2[60][8] = { { "B001", "B002", "B003", "B004", "B005", "B006", "B007", "B008"}, { "", "", "", "", "", "", "", "" } }; struct str state_ab3[60][8] = { { "C001", "C002", "C003", "C004", "C005", "C006", "C007", "C008" }, { "", "", "", "", "", "", "", "" } }; struct str* state_ab_f_read( int mode, int num1, int num2 ) { struct str *p; switch( mode ) { case 0: p = &state_ab[num1][num2]; break; case 1: p = &state_ab2[num1][num2]; break; case 2: p = &state_ab3[num1][num2]; break; defualt: p = (struct str*)NULL; } return( p ); } 多元の構造体の異なる次元なので、関数の受けは、単に str* として、下記の様なmain から呼び出してみたら、一応表示はされました。 void main( void ) { int mode, num1, num2; while( 1 ) { printf( "mode = ?" ); scanf( "%d", &mode ); if ( mode > 2 ) break; printf( "num1 = ?" ); scanf("%d",&num1 ); printf( "num2 = ?"); scanf("%d",&num2); printf(" %s\n",state_ab_f_read( mode, num1, num2 )->name ); } return 0; } 付け焼刃で作ったので、あまり綺麗ではないですが、参考にしてみてください。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

struct str state_ab[60][4] は 「str[4]型」 の1次元配列 state_ab static struct str state_ab2[60][8] は 「str[8]型」 の1次元配列 state_ab2 と見做すことができます。 「str[4]型」と「str[8]型」が違うので、単純に同じポインタを使うことができません。 解決の一つは、後ろの[4]、[8]等を同じにすることです。 数が少なければ御自身で書かれた >  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; でもよいでしょう。 他には、「strの配列やリスト へのポインタ」の配列(やリスト) にする、というのもあります。 メモリ管理や初期化が少し面倒ですが。

回答No.3

struct str{ char name[2][60] ; } ; static struct str state_ab[4] = { { "いちご" , "" } , { "みかん" , "" } , { "レモン" , "" } , { "ブドウ" , "" } , } ; static struct str state_ab2[8] = { { "きゅうり" , "" } , { "セロリ" , "" } , { "じゃがいも" , "" } , { "にんじん" , "" } , { "たまねぎ" , "" } , { "ニンニク" , "" } , { "レタス" , "" } , { "キャベツ" , "" } , } ; static struct str state_ab3[4] = { { "牛肉" , "" } , { "豚肉" , "" } , { "鶏肉" , "" } , { "魚肉" , "" } , } ; char *state_ab_f_read( int mode , int num1 , int num2 ){ struct str *p=NULL ; switch( mode ){ case 0: p = state_ab ; break; case 1: p = state_ab2; break; case 2: p = state_ab3; break; } return p[ num1 ].name[num2] ; }

mana5867
質問者

お礼

回答ありがとうございます。 一文字ずつ入れる文字列の場合、最初にNULLを入れるのですね。 最初見たところ何故NULLを入れるのかわかりませんでした。

mana5867
質問者

補足

皆さんの意見を参考に色々試してみたのですが、できませんでした。 NO3さんの書き方だと がstate_ab と state_ab2 と state_ab3がそれぞれ60ないとだめで、state_ab2が80だった場合の応用が効きません。 この応用部分の書き方を試してみてみたのですがうまく行きませんでした NO2さんの参照先をいじってみてもNO2さんが言ったとおりでできませんでした

  • 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; }

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

なぜこの構造体の定義が必要なのか不明ですが、取り急ぎ、エラーについて下記を試してみてください。 struct str *p これを  struct str **p return p[ num1 ][ num2 ].name を    return p[ num1 ][ num2 ]->name コンパイルを試してないので、エラーかワーニングが出るかも知れないですが、いずれにしても、 変数の引渡しには、代入する側とされる側は同じ定義でないとならないことと、 配列とポインターの関係 構造体のポインター参照(アロー参照) の辺りを参考書(K&Rでも、はじめてのCでも)などで良く読んで、修正して行ってみてください。 この例題自体には、構造体ポインターを無理やり使う理由はないと思うので、恐らく、リスト構造をポインター渡しする手法を勉強中なのだと理解します。構造体ポインター以前に、配列とポインターの関係、多元配列とポインターの関係が理解出来ていないと、構造体で大混乱します。 あと、初歩的なことですが構造体ポインタの参照は -> アロー演算子を使います。 ご参考に。

mana5867
質問者

お礼

回答ありがとうございます 方法を試したのですが以下のようなエラーが出ます。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(239) : error C2440: '=' : 'str [110][4]' から 'str **' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(240) : error C2440: '=' : 'str [50][8]' から 'str **' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(241) : error C2440: '=' : 'str [60][4]' から 'str **' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(243) : error C2819: クラス 'str' にはオーバーロードされたメンバ 'operator ->' がありません。 c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(4) : 'str' の宣言を確認してください。 代わりに '.' を使用しますか? c:\documents and settings\user\my documents\visual studio 2008\projects\kami\state_ab_fd.cpp(243) : error C2232: '->str::name' : 左のオペランドが 'struct' 型です。'.' を使用してください。 なぜこの構造体の定義が必要なのかは、他にもこの構造体を使っているため似たような感じにしたかったからです。

関連する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"' をソースに追加しましたか?」 というわけの分からない表示が出ました。 どのプログラムも実行できず、この表示が出ます。 急にそうなったんですが、特別なことをした覚えはありません。

専門家に質問してみよう