C ++结构数组:函数不起作用

时间:2014-09-17 02:03:04

标签: c++ arrays function struct

嘿伙计们我很擅长编码...... 所以我的代码不会运行,我不知道有什么问题。 我得到的错误之一是我的

void animal::petDataInfo(animal maxEntry[], int counter)

柜台说它没有被初始化......

基本上我不知道什么是错的......

animal.h

#ifndef Database_animal_h
#define Database_animal_h


struct animal
{
    char    petName[20];
    char    lastName[30];
    char    color[12];
    int     month, day, year;

    void petDataInfo(animal [], int &counter);
    void displayInfo(animal [], int &counter);

}; animal maxEntry[100];


#endif

的main.cpp

#include <iostream>
#include <string>
using namespace std;

#include "animal.h"


enum animalSpecies {Dog, Cat, Bird, Reptile, Other};
    animalSpecies getAnimal();
    void print(animalSpecies entered);

void menuInfo(animal [], int &counter);
void petDataInfo(animal [], int &counter);
void displayInfo(animal [], int &counter);
void quitInfo(int &counter);


int main()
{

    int     counter=0;

    counter++;




    menuInfo(maxEntry, counter);




    system ("PAUSE");
    return 0;

}


/********************************************************************************************************/

void menuInfo(animal maxEntry[], int& counter)
{
    char letter; 

    do
    {
        cout<<"\nWhat would you like to do?"<<endl;
        cout<<"(E)nter"<<endl;
        cout<<"(S)earch"<<endl;
        cout<<"(D)isplay"<<endl;
        cout<<"(C)lear"<<endl;
        cout<<"(Q)uit"<<endl;
        cout<<"\n";

        cout<<"Please enter a letter: "<<endl;
        cin>>letter;
        cout<<"\n";
        cout<<"\n";

        if (!((letter=='e')|| (letter=='E') || (letter=='s') || (letter=='S') || (letter=='d') || (letter=='D') || (letter=='c') || (letter=='C') || (letter=='q') || (letter=='Q')))
        {
            cout<<"Not a valid letter. Try again."<<endl;
            cout<<"\n";
        }
    }

    while (!((letter=='e')|| (letter=='E') || (letter=='s') || (letter=='S') || (letter=='d') || (letter=='D') || (letter=='c') || (letter=='C') || (letter=='q') || (letter=='Q')));
    {

        switch (letter)
        {

            case'e': case 'E':

                petDataInfo(maxEntry, counter);

                if ((letter=='e') || (letter=='E'))
                {
                    cout<<"Entry number: "<<counter++;
                }

                break;
            case 's': case 'S':
                cout<<"goes to search database"<<endl;
                break;
            case 'd': case 'D':

                displayInfo(maxEntry, counter);
                break;
            case 'c': case 'C':
               if ((letter=='c') || (letter=='C'))
                {
                    counter--;
                }
                break;
            case 'q': case 'Q':
                quitInfo(counter);
                break;
            default:
                cout<<"Try again. \n";
        }
    }
}

/********************************************************************************************************/

void animal::petDataInfo(animal maxEntry[], int counter)
{
    for(int i=0; i<counter; i++)
    {
        cout<<"What is the pets first name? "<<endl;
        cin>>maxEntry[i].petName;
        cout<<"What is the owners last name? "<<endl;
        cin>>maxEntry[i].lastName;

        getAnimal();

        cout<<"What month is your pets date of birth? "<<endl;
        cin>>maxEntry[i].month;
        cout<<"What day is your pets date of birth? "<<endl;
        cin>>maxEntry[i].day;
        cout<<"What year is your pets date of birth? "<<endl;
        cin>>maxEntry[i].year;
        cout<<"What color is your pet? "<<endl;
        cin>>maxEntry[i].color;
    }

    menuInfo(maxEntry, counter);
}

/********************************************************************************************************/

animalSpecies getAnimal()
{
    animalSpecies entered = Dog;
    char species;
    cout<<"Species of Animal:\n (D)og\n (C)at\n (B)ird\n (R)eptile\n (O)ther\n "<<endl;
    cin>>species;

    switch (species)
    {
        case 'd':
        case 'D':
            entered = Dog;
            break;
        case 'c':
        case 'C':
            entered = Cat;
            break;
        case 'b':
        case 'B':
            entered = Bird;
            break;
        case 'r':
        case 'R':
            entered = Reptile;
            break;
        case 'o':
        case 'O':
            entered = Other;
            break;
        default:
            cout<<"Error: Try again. "<<endl;
    }

    return entered;

}


/********************************************************************************************************/

void print(animalSpecies entered)
{
    switch (entered)
    {
        case Dog:
            cout<<"Dog"<<endl;
            break;
        case Cat:
            cout<<"Cat"<<endl;
            break;
        case Bird:
            cout<<"Bird"<<endl;
            break;
        case Reptile:
            cout<<"Reptile"<<endl;
            break;
        case Other:
            cout<<"Other"<<endl;
            break;
    }
}

/********************************************************************************************************/

void animal::displayInfo(animal maxEntry[], counter)
{

    for(int i=0; i<100; i++)
    {
        cout<<"Pet name: "<<maxEntry[i].petName<<"\n";
        cout<<"Owners last name: "<<maxEntry[i].lastName<<"\n";
        cout<<"Pet species: ";
            animalSpecies entered;
            entered = getAnimal();
            print(entered);
        cout<<"Pets DOB: ";
        if (month<10)
        {
            cout<<"0"<<maxEntry[i].month<<"/"; //if month is less than 10 it will add a '0' in front
        }
        else
        {
            cout<<maxEntry[i].month<<"/";
        }

        if (day<10)
        {
            cout<<"0"<<maxEntry[i].day<<"/";
        }
        else
        {
            cout<<maxEntry[i].day<<"/";
        }

        cout<<maxEntry[i].year<<"\n";



        menuInfo(maxEntry, counter); //goes back to the menu

    }

}

/********************************************************************************************************/

void quitInfo(int& counter)
{
   int ans;

    do
    {
        cout<<"Are you sure you want to quit? (y/n)"<<endl;
        cin>>ans;

        if ((ans=='n') || (ans=='N'))
        {
            menuInfo(maxEntry, counter); //goes back to the menu function
        }

        else if ((ans=='y') || (ans=='Y'))
        {
            exit(0); //exits the program
        }
        else
        {
            cout<<"Error: Try again. "<<endl;
        }
    }
    while (!(ans=='n') || !(ans=='N') || !(ans=='y') || !(ans=='Y'));
}

1 个答案:

答案 0 :(得分:0)

我在您的代码中发现的问题:

  1. 您已在两个地方声明petDataInfodisplayInfo,一次在animal的定义内,一次在main.cpp内。看看你的代码,我认为你不需要animal内的代码。

  2. 您在counter的定义中缺少displayInfo的类型。

    void animal::displayInfo(animal maxEntry[], counter)
    

    您需要在该行中添加类型。此外,由于该函数不是animal的成员函数,因此可以写为:

    void displayInfo(animal maxEntry[], int& counter)
    
  3. counter的类型在petDataInfo的声明和定义中有所不同。我声明,你正在使用int& counter。在定义中,您使用的是int counter。确保它们匹配。此外,类范围可以从定义中删除,因为它不再是animal的成员函数。

    void petDataInfo(animal maxEntry[], int& counter)
    
  4. 尝试访问monthday时,您遗失了该对象。改变行

    if (month<10)
    
  5.     if (maxEntry[i].month<10)
    

    并更改

        if (day<10)
    

        if (maxEntry[i].day<10)
    

    我还没有验证你的程序的逻辑。如果有,希望你能跟踪并修复它们。