0

私のプログラムは最後にメイン関数を使用して正常に動作していましたが、関数のプロトタイピングを追加してメイン関数を最初に配置すると、これらのエラーが発生し始めました。

エラー C2664: 'getData': パラメーター 1 を 'std::string [100]' から 'std::string' に変換できません コンストラクターがソース型を取得できなかったか、コンストラクターのオーバーロードの解決があいまいでした

エラー C2664: '降順': パラメーター 1 を 'std::string [100]' から 'std::string' に変換できません コンストラクターがソース型を取得できなかったか、コンストラクターのオーバーロードの解決があいまいでした

error C2664: 'ascending': パラメーター 1 を 'std::string [100]' から 'std::string' に変換できません コンストラクターがソース型を取得できなかったか、コンストラクターのオーバーロードの解決があいまいでした

エラー C2664: '出力': パラメーター 1 を 'std::string [100]' から 'std::string' に変換できません

ソース型を取得できるコンストラクターがないか、コンストラクターのオーバーロードの解決があいまいでした

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void swap(string&, string&);
void getData(string, int&);
void ascending(string, int);
void descending(string, int);
void output(string, int);
int getChoice();

int main()
{
   string name[100], temp;
   int item, choice;

   getData(name, item);

   choice = getChoice();

   if (choice == 1)
      ascending(name, item);
   if (choice == 2)
      descending(name, item);

   output(name, item);
 }



void swap(string& name1, string& name2)
{
   string temp;
   temp  = name1;
   name1 = name2;
   name2 = temp;
}


void getData(string name[], int& item)
{
   ifstream  fin;
   fin.open("E:\\p9.txt");

   item = 0;

   while (!fin.eof())
   {
      fin >> name[item];
      item++;    
   }
   cout << "item = " << item << endl << endl;
}

void ascending(string name[], int item)
{
   for(int j=0; j<item-1; j++)
   {
      for(int i=0; i<item-1; i++)
         if(name[i] > name[i+1])
            swap(name[i], name[i+1]);
   }
}

void descending(string name[], int item)
{
   string temp;
   for(int j=0; j<item-1; j++)
   {
      for(int i=0; i<item-1; i++)
         if(name[i] < name[i+1])
            swap(name[i], name[i+1]);
   }
}




void output(string name[], int item)
{
   for(int i=0; i<item; i++)
      cout << name[i] << endl;
   cout << endl << endl;
}

int getChoice()
{
   int choice;
   cout << "Please enter 1 for ascending or 2 for descending." << endl;
   cin  >>  choice;
   return choice;
}
4

2 に答える 2

3

さて、あなたの「プロトタイプ」はあなたの関数定義と一致しません。なぜ実際の機能とは関係のない試作品を導入したのですか?

これが1つの例です

void getData(string, int&);

void getData(string name[], int& item) { ... }

この場合の正しい「プロトタイプ」は次のとおりです。

void getData(string[], int&);
于 2012-11-30T06:06:12.587 に答える
0

名前は文字列として宣言する必要があります(配列であってはなりません):

int main()
{
   string name, temp;
   int item, choice;

   getData(name, item);

   choice = getChoice();
.....
于 2012-11-30T06:06:12.287 に答える