0

我试图在我试图从 C 转换为 C++ 的程序中调用我的 main 中的函数。我在其他函数中的所有函数调用都编译没有错误,但是当它到达主函数中的一个函数调用时,我得到 no matching function for call to contacts::menu(contacts*[5], int*, int&, char[50])'

这是主要的:

int main() {


 contacts *friends[5];
 char buffer[BUFFSIZE];
 int counter=0;
 int i=0;

 contacts::menu(friends, &counter,i,buffer);

 getch();
 return 0;
}

这是带有函数声明的类:

class contacts
{
  private:
          char *First_Name;
          char *Last_Name;
          char *home;
          char *cell;
  public:
  //constructor
         contacts()
         {
         }       

//Function declarations 
static void menu(contacts*friends ,int* counter,int i,char buffer[]);
};

这是菜单功能的开始部分,以便您了解它的标签:

void contacts::menu(contacts*friends,int* counter, int i,char buffer[]) 
{
  int user_entry=0;
  int user_entry1=0;
  int user_entry2=0;
  char user_entry3[50]={'\0'};
  FILE *read;
  printf("Welcome! Would you like to import a file? (1)Yes or (2) No");
  scanf("%d",&user_entry1);
  if(user_entry1==1)
    {
     printf("Please enter a file name");
     scanf("%s",user_entry3); 
     read=fopen(user_entry3,"r+");

就像我说的,我程序中的其他函数没有收到任何错误,但是这个有。我是 C++ 新手,所以我不确定是否需要添加一些特殊的东西来调用 main 中的函数。

4

3 回答 3

7

这是问题

 contacts *friends[5];

你传递给

void contacts::menu(contacts*friends,int* counter, int i,char buffer[]) 

您已经声明了一个指针数组,当contacts您将它传递给它衰减到的函数时contacts**

要使用具有当前签名的函数,您需要将friends数组声明为

contacts* friends = new contacts[5];

或者

contacts friends[5];

在后一种情况下,将数组传递给函数将起作用,因为这将衰减到contacts*您的函数所期望的值。后一种情况更可取,因为您不必担心释放您在第一种情况下使用创建的内存new

于 2012-11-21T08:08:48.467 回答
3

不要使用指针

int main()
{
    contacts friends[5];

你的代码将被编译。

于 2012-11-21T08:14:09.670 回答
0

contacts*当您尝试传递时,菜单函数需要作为第一个参数contacts*[]

于 2012-11-21T08:09:38.613 回答