C言語プログラムのエラーについて教えてください
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG必要ならソースも載せます。
リンク中...
hop2.obj : error LNK2001: 外部シンボル ""struct _iobuf * __cdecl fopen(char *@`char * const)"(?fopen@@YAPAU_iobuf@@PADQAD@Z)" は未解決です。
hop2.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
hop2.exe - エラー 2、警告 0
0002名無しさん@お腹いっぱい。
NGNG#include <stdio.h>
を忘れてしまっている・・・・というエラーです
0003名無しさん@お腹いっぱい。
NGNGfopenの関数宣言を自前でやっているのなら、extern "C"を付けろ。
stdio.hを取り込んでいるにも関わらずこのようなエラーになっている
のなら(多分それはないだろうが)、
#include <stdio.h>自体をextern "C"{}でかこめ。
0004キロス
NGNG0005魁!名無しさん
NGNG#include <stdio.h>
#include <math.h>
#include<stdlib.h>
#include<string.h>
ReadPatternFile(char *HopF2 )
{
FILE *fp@` *fopen(char *@`char [2]);
int i@` j;
if ( (fp=fopen( HopF2@` "r")) == NULL ){
fprintf( stderr@`"Pattern file (%s) open error !\n"@` HopF2 );
exit( 0 );
}
for ( i=0; i<Npattern; i++){
for ( j=0; j<UNIT; j++){
skip: switch (fgetc(fp)){
case ON_MARK:
Nominal[i][j] = ON;
break;
case OFF_MARK:
Nominal[i][j] = OFF;
break;
case EOF:
fprintf( stderr@`"Illegal pattern format (%s) !\n"@`
HopF2 );
exit( 0 );
default:
goto skip;
}
}
}
fclose(fp);
SetReverse();
}
00062
NGNG>FILE *fp@` *fopen(char *@`char [2]);
これはコンパイルを通るのね・・・・・
0007名無しさん@お腹いっぱい。
NGNGなんでfopenを宣言しててfprintfやfcloseを宣言していないの?
fopenの宣言ってFILE *fopen(char *@`char [2]);だっけ?
関数リファレンスは見た?
なにかの本のコピペ?だったら本の名前は?
とりあえず、こんごの参考にお聞かせください
0008魁!名無しさん
NGNGFILE *fp@` *fopen();とすると、
C:\Windows\デスクトップ\hop2.cpp(163) : error C2660: 'fopen' : 関数が不正な 2 個の実引数をともなって呼び出されました。
といわれてしまいました。
呼び出しているところは次のような感じになっています。
void
main( int argc@`char *argv[] )
/*int argc;
char *argv[];*/
{
int i;
int fileFlag = OFF;
char HopF2[64];
int randomSeed = 8;
int initialPattern = 0;
int initialDeviation = 10;
int displayInterval = 100;
int iterationTime = 1000;
for ( i=1; i<argc; i++ ){
switch (*(argv[i]+1)){
case 'f':
fileFlag =ON;
strcpy(HopF2@` argv[++i]);
break;
case 'n':
Npattern =atoi( argv[++i]);
break;
case'r':
randomSeed =atoi( argv[++i]);
break;
case'p':
initialPattern =atoi( argv[++i]);
break;
case'd':
initialDeviation =atoi( argv[++i]);
break;
case'i':
displayInterval =atoi(argv[++i]);
break;
case't':
iterationTime =atoi( argv[++i]);
break;
default:
fprintf(stderr@`"Usage : %s\n"@` argv[0]);
fprintf(stderr@`"\t-f input-pattern-file\n");
fprintf(stderr@`"\t-n nominal-pattern(%d)\n"@`Npattern);
fprintf(stderr@`"\t-r random-seed(%d)\n"@`randomSeed);
fprintf(stderr@`"\t-p initial-pattern(%d)\n"@`initialPattern);
fprintf(stderr@`"\t-d initial-deviation(%d)\n"@`initialDeviation);
fprintf(stderr@`"\t-i display-interval(%d)\n"@`displayInterval);
fprintf(stderr@`"\t-t iteration-time(%d)\n"@`iterationTime
);
exit( 0 );
break;
}
}
Cls(2);
int
initializeRandom( randomSeed );
if (fileFlag == ON )
ReadPatternFile(HopF2);
else
GenerateRandomPattern();
int
WeightCalculation();
SetInitialPattern( initialPattern@` initialDeviation);
DisplayAll();
for(i=0; i<iterationTime; i++ ){
Update( RandomNumber(0@` UNIT-1));
if (i != 0 && i%displayInterval == 0 )
DisplayAll();
}
}
00092
NGNG#include <stdio.h>があれば fopenを再定義しなくてもいいんだよ
fopenの再定義を外してみたら?
それから、そのコードだとCPPでコンパイルする必要は無いのでは?
0010魁!名無しさん
NGNG>fopenの再定義を外してみたら?
>それから、そのコードだとCPPでコンパイルする必要は無いのでは?
!!!できました!!!
どうもありがとうございます。
、、、不勉強で申し訳ありません。
00112
NGNGCPPだから別の引数でfopenを定義してしまったという事
とりあえず関数中で外部関数を定義するようなスタイルは一般的じゃない
から止めた方がいいと覚えよう
0012名無しさん@お腹いっぱい。
NGNG> CPPだから別の引数でfopenを定義してしまったという事
揚げ足取りでわるいが...
CでもC++でもfopenの多重定義になりません、スコープが違います
00132
NGNGスコープは違うって・・・・
ああ、既に同じ名前の関数が関数外で関数定義より上部で定義されてた
ら再宣言になるという事を俺が勝手に多重定義って書いてしまってたんだ。
スマン
もともと関数内関数は定義出来ないので、関数内で外部関数をしても
スコープ外の関数の前宣言か、外部宣言する程度の意味しかない。
現状では殆ど意味の無い機能ね。
関数内関数が定義出来りゃいいのにね
■ このスレッドは過去ログ倉庫に格納されています