

c++のファイルopen時に、下記の行番号でエラーが発生しています。  
12箇所のエラーでしたが解決出来ずにいました。  
ご知見を頂ければ有難く存じます。

[code]

    /* ****************** */
    /*   メインルーチン   */
    /* ****************** */
    void main (void)
    {
     FILE *fi,*fo;
     int sou,i,j,mode;
     float dat;
     long larn;
    
     while(1) {
      mode=mode_sel();      
      if(mode == 3)break;
      printf("\x1b*");      
      sou=junbi(mode);      
      if(mode == 1)
        printf("\nデータ・ファイル名を入力して下さい：");
      if(mode == 2)
        printf("\nファイル名を入力して下さい：");  
    
    72  fi=openfile("rt",AGAIN);
    
        fscanf(fi,"%d",&icount);    
    for(i=0;i<icount;i++){
       for(j=0;j<node[0];j++){
        fscanf(fi,"%f",&dat);
          ind[node[0]*i+j]=dat;
       }
      }
      fclose(fi);
      if(mode != 2){
       printf("データ・ファイル名を入力して下さい：");
                                                
    84   fo=openfile("rt",AGAIN);
    
    
    void omomi(int sou)
    {
     FILE *wfi;
     char dumy[20];
     int i,j,n;
     printf("既存のデータを使いますか？(y/n):");
     if(hityn() == YES){
      printf("ファイル名：");   
    
    147  wfi=openfile("rt",AGAIN);
    
    
    void neu_cal(int sou,long larn)
    {
     FILE *fe;
     int yn,wmode,i,j,inext;
     float averr,outerr[20];
     long kai;
     kai=1L;                      
     wmode=w_ren_mode();
     printf("\nエラーをファイルに出力しますか？(y/n):");
     if((yn=hityn()) == YES){
      printf("出力エラーファイル名を入力して下さい：");
    
    181  fe=openfile("wt",AGAIN);
    
    
    
    void wf_write(int sou)
    {
     FILE *wfo;
     int i,j,n;
     printf("\n出力ファイル名を入力して下さい：");
    
    413 wfo=openfile("wt",AGAIN);
    
    
    
    /* ******************** */
    /*  ファイルのオープン  */
    /* ******************** */
    FILE* openfile(int* mode, int sw)
    {
      char fn[25];
     FILE *fp;
     while(1){
      scanf("%s",fn);
    
    487  if((fp=fopen(fn,mode)) == NULL){
    
        printf("%sがオープン出来ませんでした。\n",fn);
       if(sw == EXIT) exit(1);
        printf("もう一度ファイル名を入力して下さい：");
      }else{
         break;
      }
     }
     return(fp);
    }
    
[/code]

【エラー表示】12エラー

[code]

    エラー (アクティブ) E0304   オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません    *.CPP   72  
    エラー (アクティブ) E0304   オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません    *.CPP   84
    エラー (アクティブ) E0304   オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません    *.CPP   147
    エラー (アクティブ) E0304   オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません    *.CPP   181
    エラー (アクティブ) E0304   オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません    *.CPP   413
    エラー (アクティブ) E0167   型 "int *" の引数は型 "const char *" のパラメーターと互換性がありません    *.CPP   487 
    
    エラー C2664   'FILE *openfile(char *,int)': 引数 1 を 'const char [3]' から 'char *' へ変換できません。 *.CPP   72  
    エラー C2664   'FILE *openfile(char *,int)': 引数 1 を 'const char [3]' から 'char *' へ変換できません。 *.CPP   84
    エラー C2664   'FILE *openfile(char *,int)': 引数 1 を 'const char [3]' から 'char *' へ変換できません。 *.CPP   147
    エラー C2664   'FILE *openfile(char *,int)': 引数 1 を 'const char [3]' から 'char *' へ変換できません。 *.CPP   181
    エラー C2664   'FILE *openfile(char *,int)': 引数 1 を 'const char [3]' から 'char *' へ変換できません。 *.CPP   413 
    エラー C2664   'FILE *fopen(const char *,const char *)': 引数 2 を 'int *' から 'const char *' へ変換できません。    *.CPP   487 
    
[/code]


CC BY-SA 4.0
2022-04-16T11:15:33.247
88357
2022-04-17T14:41:26.323
2022-04-17T14:41:26.323
4236
50731
question
c++ c visual-c++
ファイルopenのコンパイルエラー


openfileと言う関数の引数が宣言と食い違っています  
これをどうにかしよう


CC BY-SA 4.0
2022-04-17T13:49:03.053
88371
2022-04-17T13:49:03.053
27481
88357
answer


> sayuri様からの指摘を受けて、拡張子をCにし、UTF（BOM付）で保存したソースをコンパイルしたところ上手く行きました。

とのこと。これについて説明しておきます。

* * *

Visual C++コンパイラは、C言語とC++言語の両方を扱えます。ソースコードの拡張子が `.c` であればC言語としてコンパイルを行い、 `.cpp`
であればC++言語としてコンパイルします。もしくは[コンパイルオプション/TC
/TPなどで言語を指定](https://docs.microsoft.com/ja-jp/cpp/build/reference/tc-tp-tc-tp-
specify-source-file-type?view=msvc-170)することもできます。

ここで、C言語とC++言語は似ていますが異なる部分もあります。エラーメッセージに

> オーバーロードされた関数 "openfile" のインスタンスが引数リストと一致しません

とありましたが、「オーバーロード」の概念はC言語には存在せず、C++言語のみに存在します。このため、C言語のソースコードをC++言語としてコンパイルした場合に発生するエラーであり、C言語のソースコードをC言語としてコンパイルすれば発生しないであろうエラーです。

* * *

> またC言語のコードでしたが、VS2019でコンパイルしており、cppが選択されているためcppの質問としました。

ご自身の利用したい言語（≠利用している言語）を把握するのは質問者の責務と考えます。例えば、自分が日本語をしゃべっているのか英語をしゃべっているのかわからない状態で質問を行うのはナンセンスです。  
C言語のソースコードを扱っているのであれば、利用したい言語は紛れもなくC言語でしょう。


CC BY-SA 4.0
2022-04-17T14:40:25.973
88372
2022-04-17T14:40:25.973
4236
88357
answer