Почему не видит функцию(выдает ошибку, что нет такой функции), пытаюсь передать динамический массив структур в функцию

main.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "unit2.h"
int main()
{
struct vine_struct
{
    double pricer;
    double priced;
    double review;
    char name[30];
};
int vine_num=10;
vine_struct* vine=new vine_struct[vine_num];
display(&vine, vine_num);
}

unit.cpp

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include "unit2.h"
void display(vine_struct *&k, int z)
{
int i=0, j=0, ind=0;
using namespace std;
for(i=0; i<z; i++)
    {
    if(i==0)
    {
    for(j=0; j<50; j++)
    cout<<"-";
    cout<<"\n";
    cout<<"|цена,р |цена,$ |Б. |название                    |"<<endl;
    for(j=0; j<50; j++)
    cout<<"-";
    cout<<"\n";
    }
    for(ind=0;ind<28;ind++)
    {
        if(k[i].name[ind]=='_')
        k[i].name[ind]=' ';
    }
    printf("|%7.2lf|%7.2lf|%3.1lf|%28s|\n",k[i].pricer,k[i].priced,k[i].review, k[i].name );
    for(j=0; j<50; j++)
    cout<<"-";
    cout<<"\n";
    }



}

unit2.h

 #pragma once
struct vine_struct
{
    double pricer;
    double priced;
    double review;
    char name[30];
 };
 #ifndef u
void openw(FILE *a, char z[10] );
void openr(FILE *a, char z[10] );
void openrc(FILE *a, char z[10] );
int check1(int z);
int check2(int z, int x);
int check3(int z);
int check4(int z, int x);
void display(vine_struct *&k, int z);
#endif

Ответы (1 шт):

Автор решения: Harry

Ну смотрите сами:

void display(vine_struct *&k, int z);

Что ей передается? Ссылка на указатель на vine_struct и int.

Что вы ей передаете?

vine_struct* vine=new vine_struct[vine_num];
display(&vine, vine_num);

Указатель на указатель на vine_struct. А такую функцию компилятор найти не может. Понятна первая ошибка?

Надо бы так:

display(&vine, vine_num);

Но поскольку у вас есть две разных vine_struct — одна в заголовочном файле, вторая в main(), то получается, что ваша display() в силу объявления должна принимать ссылку на указатель на структуру, объявленную в заголовочном файле, а вы передаете ей указатель на указатель на другую структуру с тем же именем, но объявленную в функции main(). Непонятно, зачем...

Понятна вторая ошибка?

Вот такая main() компилируется:

int main()
{
    /*
    struct vine_struct
    {
        double pricer;
        double priced;
        double review;
        char name[30];
    };
    */
    int vine_num=10;
    vine_struct* vine=new vine_struct[vine_num];
    display(vine, vine_num);
}

Что она делает и делает ли — это вопрос второй, но программа компилируется.

→ Ссылка