C++ 无法转换参数错误

C++ 无法转换参数错误,c++,visual-c++,C++,Visual C++,最后,我的程序与主函数配合得很好,但当我添加函数原型并将主函数放在开头时,我开始出现这些错误 错误C2664:“getData”:无法从“std::string”转换参数1 [100]“到”std::string“没有构造函数可以采用源类型,或者 构造函数重载解析不明确 #include <iostream> #include <string> #include <fstream> using namespace std; void swap(string&

最后,我的程序与主函数配合得很好,但当我添加函数原型并将主函数放在开头时,我开始出现这些错误

错误C2664:“getData”:无法从“std::string”转换参数1 [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;
}
错误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;
}
错误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;
}
错误C2664:“输出”:无法从“std::string”转换参数1 [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;
}
#包括
#包括
#包括
使用名称空间std;
无效交换(字符串&,字符串&);
void getData(字符串、int&);
升序无效(字符串,int);
无效递减(字符串,int);
无效输出(字符串,int);
int getChoice();
int main()
{
字符串名称[100],临时;
int项,选择;
getData(名称、项目);
choice=getChoice();
如果(选项==1)
升序(姓名、项目);
如果(选项==2)
(姓名、项目);
输出(名称、项目);
}
无效交换(字符串和名称1、字符串和名称2)
{
字符串温度;
温度=名称1;
名称1=名称2;
名称2=温度;
}
void getData(字符串名[],int和item)
{
流鳍;
财务公开(“E:\\p9.txt”);
项目=0;
而(!fin.eof())
{
fin>>名称[项目];
项目++;
}

cout名称应声明为字符串(不应为数组):


名称应声明为字符串(不应为数组):

嗯,你的“原型”与你的函数定义不匹配。你为什么要引入与实际函数无关的原型

这里有一个例子

void getData(string, int&);

void getData(string name[], int& item) { ... }
在这种情况下,正确的“原型”是

void getData(string[], int&);
嗯,你的“原型”与你的函数定义不匹配。你为什么要引入与实际函数无关的原型

这里有一个例子

void getData(string, int&);

void getData(string name[], int& item) { ... }
在这种情况下,正确的“原型”是

void getData(string[], int&);

与错误无关,但将
while(!fin.eof()){fin>>name[item];item++;}
更改为
while(fin>>name[item++];
与错误无关,但将
while(!fin.eof()){fin>>name[item];item++;}
更改为
while(fin>>name[item++])
。哦,我知道了。谢谢你的帮助。我不知道你也必须在中添加括号。哦,我知道了。谢谢你的帮助。我不知道你也必须在中添加括号。