Passing Array of Object gives compilation ERROR

Discussion in 'C++' started by vishalonne, Dec 21, 2012.

  1. vishalonne

    vishalonne New Member

    Joined:
    Oct 28, 2012
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Hello Everybody

    This is my question
    Define a class named HOUSING in C++ with the following descriptions:
    Private members
    REG_NO integer(Ranges 10 — 1000)
    NAME Array of characters(String)
    TYPE Character
    COST Float
    Public Members
    • Function Read_Data( ) to read an object of HOUSING type
    • Function Display() to display the details of an object
    • Function Draw Nos( ) to choose and display the details of 2 houses selected randomly from an array of 10 objects of type HOUSING Use random function to generate the registration nos. to match with REGNO from the array.

    Now I'm trying to do this by this way

    Code:
          #include <iostream.h>
          #include <conio.h>
          #include <stdlib.h>
        
          class housing
          {
                private:
                    int REG_NO;
                    char NAME[10];
                    char TYPE;
                    float COST;
                public:
                    void Read_Data();
                    void Display();
                    void DrawNos(housing);
          };
          void housing::Read_Data( )
          {
                cout<<"Enter Registration No: ";
                cin>>REG_NO;
                cout<<"Enter Name: ";
                cin>>NAME;
                cout<<"Enter Type: ";
                cin>>TYPE;
                cout<<"Enter cost: ";
                cin>>COST;
          }
          void housing::Display()
          {
          }
          void housing::DrawNos(housing* h1[])
          {
               int N=10;
               int randomREG=random(10);
               N=random(2);
               cout<<h1[N]->REG_NO;
          }
          void main()
          {     
                int i=0;
                housing* h[5];
                for(i=0;i<5;i++)
                {
                        h[i]->Read_Data();
                }
                for(i=0;i<5;i++)
                {
                        h[i].DrawNos(h); // I am trying to pass the array of object to DrawNos function but getting error
                }
          }
    I am trying to pass the entire array of object in DrawNos(). but getting comilation error -

    What is the problem? How can I pass the array of object in function and use it.

    Please help me with this problem.
     
  2. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Code:
    housing* h[5];
    
    defines h as an array of 5 pointers to housing objects. You don't define the memory for those objects anywhere; these are only pointers (and so Read_Data is writing that data somewhere completely undefined in memory). Probably you meant to do:

    Code:
    housing h[5];
    
    so I've fixed that in my copy of your code. This now means that h[x]->y has to be h[x].y so I'll fix that too.

    Your DrawNos() seems to want to take an array of pointers to housing objects for some reason, yet doesn't loop over that array. You seem to be confused about syntax. I'll change this to:

    Code:
    void housing::DrawNos(housing h1)
    
    So now we get to your problem:
    Code:
    h[i].DrawNos(h); // I am trying to pass the array of object to DrawNos function but getting error
    
    I'm not surprised. Why are you trying to pass the whole array when you are already looping over that array? What you need to do is to loop over the array and pass one object at a time into a function that handles one object (which is what DrawNos is written to do, even given the syntax errors), OR not to loop over the array and pass the whole array into a function which then loops over that array.

    Also I don't see any reason for passing h into the function. h already identifies the object you're working on, so just pass nothing.

    I can't see what you're trying to do in DrawNos. Could you explain it please? Give me an overall description of what you want the function to do, then explain what each line contributes to that aim. There are only 4 lines so this shouldn't be too difficult. As I don't know what you're trying to do I can't fix it; the code is just too random.
     
    shabbir likes this.
  3. vishalonne

    vishalonne New Member

    Joined:
    Oct 28, 2012
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    thank you xpi0t0s but now I am fed up with this question. I am totally completely confused :crazy: how can I get the ALL REGNO for randomizing them are show the selected REGNO.
    If you can show mw some way I will be thankful
     
  4. vishalonne

    vishalonne New Member

    Joined:
    Oct 28, 2012
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Here the question
    This is my question
    Define a class named HOUSING in C++ with the following descriptions:
    Private members
    REG_NO integer(Ranges 10 — 1000)
    NAME Array of characters(String)
    TYPE Character
    COST Float
    Public Members
    • Function Read_Data( ) to read an object of HOUSING type
    • Function Display() to display the details of an object
    • Function Draw Nos( ) to choose and display the details of 2 houses selected randomly from an array of 10 objects of type HOUSING Use random function to generate the registration nos. to match with REGNO from the array.

    I hope you gone through the question. I am try to gerenerate creating the array of objects and then select any 2 random the REGNO from those REGNO. Before selecting the REGNO I have to enter the details.
    I lost my way:(
     
  5. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    OK it's probably easiest if I give you an example.
    Code:
    class housing
    {
    private:
    	int REG_NO;
    	char NAME[10];
    	char TYPE;
    	float COST;
    public:
    	void Read_Data(int i);
    	void Display();
    	void DrawNos(housing h[]);
    };
    
    void housing::Read_Data(int i)
    {
    	REG_NO=10*i;
    	sprintf_s(NAME,10,"name%d",i);
    	TYPE='a'+i;
    	COST=i*100;
    }
    
    void housing::Display()
    {
    }
    
    void housing::DrawNos(housing h[])
    {
    	int rnd1=rand()%10;
    	int rnd2=rand()%10;
    	while (rnd2==rnd1)
    	{
    		rnd2=rand()%10;
    	}
    	printf("House %d's name is %s\n",rnd1,h[rnd1].NAME);
    	printf("House %d's name is %s\n",rnd2,h[rnd2].NAME);
    }
    
    void test56()
    {     
    	int i=0;
    	housing h[10];
    	for(i=0;i<10;i++)
    	{
    		h[i].Read_Data(i);
    	}
    	h[0].DrawNos(h);
    }
    
     
  6. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    This is done in a testbed so my main function calls test56(). You might want to rename test56 to main. I couldn't be bothered typing stuff in so I autogenerated the data.

    Output:
    House 1's name is name1
    House 7's name is name7
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice