Sign in to follow this  
Sirisian

accessing private Vectors

Recommended Posts

class c_weapon
{
public:
    ~c_weapon(){
        while (firingmode.size())
        {
            delete firingmode.back();
            this->firingmode.pop_back();
        }
    }
    void initialfiringmodes(short int modes){
        firinginfo.setfiringmodes(modes);
        for(short int createmodes=0; createmodes<=modes; createmodes++){
            firingmode.push_back(new c_firingmode());
        }
    }
    c_firinginfo *getfiringinfo(){return &firinginfo;}
    
    c_firingmode *getfiringmode(int index){return &firingmode[index];}//<<<<----
    
private: 
    c_firinginfo firinginfo;
    std::vector<c_firingmode*> firingmode; //<<<<---------     
};
The line //c_firingmode **getfiringmode(int index){return &firingmode[index];} is wrong. What it's supposed to do is access "firingmode" from the private declaration std::vector<c_firingmode*> firingmode; just in case you didn't realize, firingmode is an "vectored array" of instances of the class c_firingmode. Can someone who knows C++ and how Vectors work please figure out this problem. I've asked people on another forum but they've never ran into this before. Am I doing this a hard way also? If there is a better way, I would like to know. The c_firingmode is a really big class though. So to restate I need to figure out how to access a vector of pointers that are private in a class.

Share this post


Link to post
Share on other sites
Quote:
Original post by Sirisian

//...
c_firingmode *getfiringmode(int index){return &firingmode[index];}

private:
//...
std::vector<c_firingmode*> firingmode;
};


The line
//c_firingmode **getfiringmode(int index){return &firingmode[index];}


im confused

which do you want
c_firingmode *getfiringmode(int index){return &firingmode[index];}
c_firingmode **getfiringmode(int index){return &firingmode[index];}

if its the first your problem is the & operator

what are you trying to do?

the operator[]( int i ) of a vector returns a reference, wouldn't that do for whatever you're doing?

[EDIT]

i just compiled the above with the ** version, it compiles

and the * version with the return statment modified to

c_firingmode *getfiringmode(int index){return firingmode[index];}

they both compiled. what isnt working?

Share this post


Link to post
Share on other sites
In the most basic way. Think of it like this.

I have an array of guns that hold all the information of each gun.

c_weapon weaponlist[10];

Then I want to set how many firing modes, of say weapon 0.

weaponlist[0].initialfiringmodes(1);

That would create 1 firing mode on the gun. Then if I wanted to access the speed of the first firing mode I would say.

weaponlist[0].getfiringmode()->setspeed(20);

But, I can't create a function inside of c_weapon that will access the vector firingmodes.

EDIT

C:\Documents and Settings\Brandon Andrews\My Documents\C++\test\weapon_class.hpp In member function `c_firingmode* c_weapon::getfiringmode(int)':

164 C:\Documents and Settings\Brandon Andrews\My Documents\C++\test\weapon_class.hpp cannot convert `c_firingmode**' to `c_firingmode*' in return

I used just
c_firingmode *getfiringmode(int index){return &firingmode[index];}

I can't figure out why it says can't convert "c_firingmode**" to "c_firingmode*"

[Edited by - Sirisian on March 1, 2010 9:53:35 AM]

Share this post


Link to post
Share on other sites
You template is defined to store pointers to firing modes. Then, in the access function, you pull an element from the list and return the address of it. So you're returning a pointer to a pointer firing mode.

But the function is defined as returning a pointer to a firing mode.

Take the & out of "return &firingmode[index];"

you want to "return firingmode[index];"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this