簡體   English   中英

嘗試在main中調用函數時出錯。

[英]Error when trying to call a function in main.

我試圖在我試圖從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中調用函數。

這是問題所在

 contacts *friends[5];

你傳遞給

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

當您將其傳遞給衰減到contacts**的函數時,您已經聲明了一個指向 contacts指針數組contacts**

要將函數與當前簽名一起使用,您需要將friends數組聲明為

contacts* friends = new contacts[5];

要么

contacts friends[5];

在后一種情況下,將數組傳遞給函數將起作用,因為它將衰減到函數期望的contacts* 后一種情況比較可取,因為您不必擔心在第一種情況下使用new釋放創建的內存

不要使用指針

int main()
{
    contacts friends[5];

然后您的代碼就會編譯。

菜單功能預計contacts*作為第一個參數,而你正在試圖通過contacts*[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM