Я пытаюсь вызвать функцию в моем main в программе, в которой я пытаюсь конвертировать из C в C ++. Все мои вызовы функций внутри других функций компилируются без ошибок, но когда он доходит до вызова одной функции в основном, я получаю 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.
Не используйте указатели
int main()
{
contacts friends[5];
и ваш код скомпилируется.
Вот проблема
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
функция меню ожидает contacts*
в качестве первого аргумента, пока вы пытаетесь передать contacts*[]