Jump to content
  • Advertisement
Sign in to follow this  

accessing private Vectors

This topic is 4612 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
Advertisement
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
yup, you were passing back the address of the element in the vector, the address of a pointer, i.e. a pointer to a pointer.

i presume that was the problem...

Happy to help, good luck

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!