ソース自体が長いので問題となっている所だけ書きます。
情報量が少なくて申し訳ありませんが…。
VC環境です。
/* define定義 */
#define IF_ITEM_CNT 14
・
・
・
/* 内部関数プロトタイプ宣言 */
int AnalyzeProc( char **pReturnString, char *pTargetString,
int StrNum, char String ); /* 文字列分解処理を行う関数 */
・
・
・
/* グローバル変数宣言 */
char In_Rec[ IN_FILE_MAX_LEN + 1 ];
char *w_In_Rec[ IN_ITEM_CNT + 1 ];
・
・
int Main{
・
・
・
}
int MainProc{
・
・
strncpy( g_dn03_rec.DN03_KISYU_MEI, sizeof( g_dn03_rec.DN03_KISYU_MEI ),
w_In_Rec[ 10 ], DN03_KISYU_MEI );
・
・
M_Res = AnalyzeProc( &w_IN_Rec, In_Rec,
IF_ITEM_CNT, ',' );
・
addSpeace( 0, 0, DN03_KISYU_MEI_LEN, _dn03_rec.DN03_KISYU_MEI );
・
・
return ( TRUE );
}
となっているのですが、エラーが出ます。
Warning C4047 : '関数' : 内接参照のレベルが 'char **' と 'char *(*)[15]' で異ります。
Warning C4024 : 'AnalyzeProc' この型が 1 の仮引数および実引数と異なります。
Warning C4013 : 関数 'addSpace' は定義されていません。int型の値を返す外部関数と見なします。
あとリンクのエラーで
error : LNK2019 : 未解決の外部シンボル _addSpeace が関数 _MainProc で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
というエラーが出るのですがどう直していいかわかりません。
Warning C4047も型が違うのはわかるんですがどうすればいいのか…。
Warning C4013は前にこのエラーが出たときはプロトタイプ宣言することでエラーは無くなったんですが、
今回のは違うみたいです。宣言の仕方が悪かったのかもしれませんが。
No.1ベストアンサー
- 回答日時:
ソースコードが部分的にしか掲載されていないようなので、
確かな事はわかりませんが、
> Warning C4047 : '関数' : 内接参照のレベルが 'char **' と 'char *(*)[15]' で異ります。
>
> Warning C4024 : 'AnalyzeProc' この型が 1 の仮引数および実引数と異なります。
関数AnalyzeProcが宣言と、
呼び出し時で、引数の型が違っているので、出ている警告と思います。
関数を呼び出す時の、
パラメタは、宣言した通りの型を使って呼び出しましょう。
> Warning C4013 : 関数 'addSpace' は定義されていません。int型の値を返す外部関数と見なします。
> Warning C4013は前にこのエラーが出たときはプロトタイプ宣言することでエラーは無くなったんですが、
プロトタイプを宣言して、コンパイルの警告は、回避したつもりのようですが、
> error : LNK2019 : 未解決の外部シンボル _addSpeace が関数 _MainProc で参照されました。
リンク時に、エラーになっているのは、
addSpaceのプロトタイプはあるが、
実装が見つからないようです。
addSpaceの実装がどうなっているか確認しましょう。
この回答への補足
早速の回答ありがとうございます。
>関数を呼び出す時の、
>パラメタは、宣言した通りの型を使って呼び出しましょう。
&w_IN_Rec の部分をどのようにしたら
char **になるんでしょうか?
現行ではこれで通っていたようなので余計にわからなくなってます。
これだけの情報じゃさすがに難しいとは思いますが。
>プロトタイプを宣言して、コンパイルの警告は、回避したつもりのようですが、
これについては他のプログラムの改修中、VCの警告レベルを3に上げた際に
MainProcなどの関数がMain関数の下にあったため上記のエラーがでてプロトタイプ宣言で解決しました。
今回のエラーと同じエラーでも意味が違うということですか?
No.3
- 回答日時:
>char *w_In_Rec[ IN_ITEM_CNT + 1 ];
>int AnalyzeProc( char **pReturnString, (以下略)
>M_Res = AnalyzeProc( &w_In_Rec, In_Rec, (以下略)
この3行を良く見ましょう。
「&」の無い「w_In_Rec」は「&w_In_Rec[0]」と同じです。「w_In_Rec[0]」は中身が「char *」ですから「&w_In_Rec[0]、つまりw_In_Rec」は「char **」です。
では「&w_In_Rec」は何ですか?
「&」がもう1つ付いてますから「char **へのポインタ、つまりchar ***」です。
int AnalyzeProc( char **pReturnString, (以下略)
と宣言しておいてchar ***を渡したら怒られて当たり前です。
呼んでる方の「&」が余計か、呼ばれてる方に「*」が1個足りません。
で、呼ばれてる関数AnalyzeProcで何をしてるかが質問文に書いてないので、呼んでる方の「&」が余計か、呼ばれてる方に「*」が1個足りないか、どっちが悪いのか判断出来ません。
>addSpeace( 0, 0, DN03_KISYU_MEI_LEN, _dn03_rec.DN03_KISYU_MEI );
「空間」を和英辞典で牽いてみましょう。そして、そこに載ってる単語と「Speace」の綴りが合ってるか、穴が開くほど見比べましょう。
この回答への補足
>呼ばれてる関数AnalyzeProcで何をしてるかが質問文に書いてないので
AnalyzeProcは以下のような処理をしています。
int AnalyzeProc( char **pReturnString,
char *pTargetString,
int StrNum,
char StripChar ) {
long StringLen; /* 処理文字列長 */
long ProcPos; /* 処理中ポインタ */
long StartPos; /* スタートポイント */
long GetStringNum; /* 取得文字列数 */
long HitCount; /* 合致数 */
/* 初期化 */
HitCount = StringLen = ProcPos = StartPos = GetStringNum = 0;
/* 文字列長の取得 */
StringLen = strlen(pTargetString);
/* 対象文字列のチェック */
if ( pTargetString == '\0' ) {
returnBAD;
}
/* 文字列数と区切り文字の関連チェック */
for( ProcPos = 0; ProcPos < StringLen; ProcPos++ ) {
if ( pTargetString[ProcPos] == StripChar ) {
HitCount++;
}
}
/* 区切り文字数チェック */
if ( StrNum != (HitCount + 1) ) {
return BAD;
}
/* 文字列分割退避 */
ProcPos = 0;
while (GetStringNum != HitCount) {
if ( pTargetString[ProcPos] == StripChar ) {
/* 退避領域の確保 */
if ( ProcPos == StartPos ){
/* 区切り文字間に何も文字がない場合NULL領域のみ確保 */
pReturnString[GetStringNum] = (char *)malloc(1);
memset((void *)pReturnString[GetStringNum], '\0', 1);
} else {
pReturnString[GetStringNum] = (char *)malloc((ProcPos - StartPos) + 1);
/* 確保領域の初期化 */
memset((void *)pReturnString[GetStringNum], '\0', ((ProcPos - StartPos) + 1));
/* 退避 */
memcpy( (void *)pReturnString[GetStringNum], &pTargetString[StartPos], ProcPos - StartPos);
}
StartPos = ProcPos + 1;
GetStringNum++;
}
ProcPos++;
}
/* 文字列最後までを退避 */
/* 退避領域の確保 */
pReturnString[GetStringNum] = (char *)malloc(strlen(&pTargetString[StartPos]) + 1);
/* 確保領域の初期化 */
memset((void *)pReturnString[GetStringNum], '\0', (strlen(&pTargetString[StartPos]) + 1));
/* 退避 */
memcpy( (void *)pReturnString[GetStringNum], &pTargetString[StartPos], strlen(&pTargetString[StartPos]));
return GOOD;
}
No.2
- 回答日時:
「AnalyzeProc を呼び出すときに &w_IN_Rec と & を付けたのはなぜだろう」とか「本当に addSpeace
を定義してたっけ」と自問するといいかもしれない.お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
最近、いつ泣きましたか?
泣いてストレス発散! なんて言いますよね。 あなたは最近いつ、どんなシチュエーションで泣きましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
【お題】絵本のタイトル
【お題】 「ないた あかおに」「ねないこ だれだ」「はらぺこあおむし」みたいだけど、一体これどういう内容?と思った絵本のタイトルを教えて下さい
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
間接参照のレベルが異なっています
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c++ 文字列を入力して、一文字...
-
文字列から空白を取り除きたい...
-
-'0'の意味について
-
C言語のfor文です。 繰り返しの...
-
下記のプログラムがコンパイラ...
-
C言語プログラミングについて(...
-
fgetsなどのときのstdinのバッ...
-
Win32APIでのエディットボック...
-
double型の値をchar配列に変換...
-
C++(というよりC)で文字を置換
-
半角カナ→16進
-
全角文字を含んだ文字の並びを...
-
TCHAR文字列?の特定部分の数字...
-
DxLibについて質問です
-
絶対パスからのファイル名の切...
-
MFCでのBITMAP作成について
-
C言語エラーについて
-
構造体の各メンバにfor文からア...
-
charからLPTSTRへの変換方法
-
配列をnビットシフトする
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringをwchar_tに変換したい
-
fgetsなどのときのstdinのバッ...
-
charからLPTSTRへの変換方法
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
配列をnビットシフトする
-
間接操作のレベルとは
-
charでの計算?
-
テキストデータをそのままバイ...
-
型変換
-
'const char *' 型は 'char *' ...
-
double型の値をchar配列に変換...
-
間接参照のレベルが異なっています
-
干支のプログラム
-
atoi( ) の反対をやりたい
-
C言語です
-
絶対パスからのファイル名の切...
-
ネットワークにつながっている...
-
【C言語】文字型と整数型の違い
-
Win32APIでのエディットボック...
おすすめ情報