1

ユーザーにファイル名を要求し、入力をメインに戻す関数を作成する必要がある課題があります。これをパラメーターとして渡す必要があります (これは参照渡しを意味すると想定しています)。私は単に最初の関数「getFileName」に取り組んでいます。C++ でこれを行う簡単な方法があることは知っていますが、この方法で行うように指示されています。ここで学ぶ価値のあることがあると確信していますが、把握していません。いずれにせよ、関数を整数として機能させることができました:

#include <iostream>
using namespace std;    

void getFileName(int &fileName);

int main()
{
   int fileName;
   getFileName(fileName);
   cout << fileName;
   return 0;
}

void getFileName(int &fileName)
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

整数をテキストに変更しようとすると、問題が発生します。プロトタイプを使用するように言われました:

void getFileName(char []); 

ほとんどの場合、配列へのポインターの設定、配列への参照の設定などでエラーが発生します。私の現在のコードは次のようになります。

#include <iostream>
using namespace std;

void getFileName(char &fileName[]);

int main()
{
   char fileName[];
   getFileName(fileName);
   cout << fileName;
   return 0;
}
void getFileName(char &fileName)
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

そして、g ++でエラーが発生します:

assign26.cpp:19: error: declaration of ‘fileName’ as array of references
assign26.cpp: In function ‘int main()’:
assign26.cpp:23: error: storage size of ‘fileName’ isn't known

問題を解決するためのコードを提供していただければ、課題を遂行するのに役立ちますが、何が起こっているのかを理解したいので、解決策を説明してください。与えられたすべての助けに感謝します。

編集

これが機能するコードです。このサイトのメンバーのすべての助けに感謝します!

void getFileName(char fileName[]);

int main()
{
   char fileName[256];
   getFileName(fileName);
   cout << fileName;
   return 0;
}

void getFileName(char fileName[])
{
   cout << "Please enter the filename: ";
   cin >> fileName;
   return;
}

問題: 配列がどのように機能するかを理解していませんでした。必要のないときに参照によってテキストを渡そうとしていました。また、私が見たはずの構文エラー。

4

2 に答える 2

0

関数のプロトタイプの署名が、その実装の署名と一致しません。char& x[]パラメータリストと同じだと思うかもしれませんchar& xが、実際には大きく異なります。最初は文字への参照の配列を宣言し、最後は文字への参照を宣言します。参照の配列は標準では許可されていないため、それは不可能であり、この状況では配列を参照渡しする必要はありません(あなたがやろうとしていたと思います)。

あなたの投稿では、テキストを挿入したいと言いました。この場合、必要なのは文字の配列だけです。署名は次のようになります。

void getFileName(char fileName[]);

fileNameさらに、main 内で、境界が不明な配列を宣言します。ディメンションを指定する必要があるため、これは許可されません。何かのようなもの:

char fileName[256];

ただし、ユーザーが入力する文字数がわからない場合は、配列を動的に割り当てる必要があります。たとえば、次を使用しますstd::string

#include <string>

void getFileName(std::string &);

int main()
{
    std::string fileName;
    getFileName(fileName);
}

void getFileName(std::string& fileName)
{
    std::cout << "Please enter the filename: ";
    std::cin >> fileName;
}
于 2013-06-01T16:34:35.000 に答える