尝试在main中调用函数时出错。

时间:2012-11-21 08:05:28

标签: c++ function

我正试图在我试图从C转换为C ++的程序中调用main中的函数。我在其他函数中调用的所有函数都没有错误地编译,但是当它到达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中的函数。

3 个答案:

答案 0 :(得分: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释放您创建的内存

答案 1 :(得分:3)

不要使用指针

int main()
{
    contacts friends[5];

您的代码将被编译。

答案 2 :(得分:0)

当您尝试传递contacts*

时,

菜单功能需要contacts*[]作为第一个参数