Class zichzelf gebruiken

Status
Niet open voor verdere reacties.

manhaeve5

Gebruiker
Lid geworden
9 jan 2007
Berichten
276
Ok, stel je voor. je hebt een class genaamd player en een vector die de class player vasthoudt.
Code:
class player{
     public:
     player(vector <player> &players){
                                                   players.push_back(player);
                                                   }
     private:
};
Deze code zal niet werken.
Maar hoe kan ik dan er voor zorgen dat de class zichzelf toevoegt aan de vector
Bijv.
Code:
player myplayer(players);
ik zou dan willen hebben dat in de vector players myplayer zit
Hoe kan dit?
 
Probeer eens met het woord "this".

Overigens zou ik geen voorbeeld kunnen bedenken waarbij je de klasse, welke de vector aanmaakt, zelf ook in die vector zou willen zetten.

Wellicht als je uitlegt wat je van plan bent, misschien is er een andere mogelijkheid :)
 
@aajeetee, kan handig zijn voor primitieve map-links in bvb een observer-patroon

Om te antwoorden op de vraag: dat kan je door je vector static te maken bvb.

conceptcode
Code:
class blah {
  private:
    static vector<blah> myMembers;
    //datamembers
    int getal;

  public:
    //constructor
    blah(int i) {
        this.getal = i;
        blah.myMembers.push_back(this);
    }
    
    //destructor
    ~blah() {
        //ik heb geen flauw id wat de code is om een member uit een vector te halen :p
        blah.myMembers.remove(this);
    }
}

Zit waarschijnlijk niet foutloos in elkaar (ik moet dringend naar m'n bed toe :p)

--Johan
 
oh okee dan, verkeerd begrepen :p

Code:
class player{
     public:
     player(vector <player> &players){
            players.push_back(this);
     }
};

zo dan?

--Johan
 
Nee, dat werkt niet, en m'n is als volgt: ik ben een rpg aan het maken ik zou willen dat in je constructor de class die aangemaakt wordt toegevoegd in een static vector van die class. Dus als ik al m'n objecten heb gemaakt. In de class er een vector zit met al de objecten er in
zoals dit
Code:
class player
{
   static vector<player> player;
   string naam;
   player(string getnaam)
             {
             naam=getnaam;
             //voeg deze toe aan player
             }
};

int main
{
player player1("Robin");
player player2("Test1");
cout<<player::players[0].naam<<endl;
cout<<player::players[1].naam<<endl;
cin.get();
return 0;
}
 
Laatst bewerkt:
dit heb ik voor je gemaakt kijk maar of je er wat mee kunt
Code:
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
class mypoint
{
private:
int x;
int y;
vector<mypoint> listofpoints;
public:
mypoint( int x, int y, bool getme )
    :x(x), y(y)
    {}
mypoint( int x = 0, int y = 0 )
    :x(x), y(y)
    {
    listofpoints.push_back( mypoint( x, y, true ) );
    }

mypoint mypoint::getvectorelement( int x )
    {
    return listofpoints[x];
    };
void mypoint::pushvectorelement( mypoint thistopush )
    {
    listofpoints.push_back( thistopush );
    };
int mypoint::getx()
    {
    return x;
    };
int mypoint::gety()
    {
    return y;
    };
};

int main()
    {
    mypoint testitem( 10, 10 );
    mypoint testitem2( 20, 20 );
    testitem.pushvectorelement( testitem2 );
    cout << testitem.getvectorelement(0).getx() << endl << testitem.getvectorelement(1).getx();
    cin.get();
    return EXIT_SUCCESS;
    }
 
dankje voor je moeite maar het is eigenlijk de bedoeling dat het allemaal gebeurt in de constructor
 
je wilt dat alle objecten die je maakt komen in 1 object? dan zul je het object waar alles in komt mee moeten geven naar de constructor. je krijgt dat bv een object genaamd playerlist en verder objecten genaamd player1-player2 enz enz

en je zegt dat het in de constructoer moet. ik snap niet wat je bedoelt aangezien in mijn code je maar 1 lijntje extra per aangemaakt object nodig hebt om deze toe te voegen aan de grote lijst
 
Nee, dat werkt niet, en m'n is als volgt: ik ben een rpg aan het maken ik zou willen dat in je constructor de class die aangemaakt wordt toegevoegd in een static vector van die class. Dus als ik al m'n objecten heb gemaakt. In de class er een vector zit met al de objecten er in
zoals dit
Code:
class player
{
   static vector<player> player;
   string naam;
   player(string getnaam)
             {
             naam=getnaam;
             //voeg deze toe aan player
             }
};

int main
{
player player1("Robin");
player player2("Test1");
cout<<player::players[0].naam<<endl;
cout<<player::players[1].naam<<endl;
cin.get();
return 0;
}

dit is wat ik bedoel
 
dus je bent klaar? zet je vraag dan op beantwoord. rechtsonderin je scherm
 
nee, ik kom 1 regel te kort
namelijk deze:
in plaats van de comment:
Code:
players.push_back(maar wat moet er hier komen?);
 
ok, ik heb ontdekt dat this eeen pointer is, dus ziet m'n vector er als volgt uit:
Code:
static vector<player*> players;
en m'n constructer zo:
Code:
weapons.push_back(this);
maar nu krijg ik 2 dezelde linker errors:
Code:
[Linker error] undefined reference to `player::players'
 
Laatst bewerkt:
player:: is voor functies
player. is voor variabelen

vervang dus
Code:
cout<<player::players[0].naam<<endl;
cout<<player::players[1].naam<<endl;
door
Code:
cout<<player.players[0].naam<<endl;
cout<<player.players[1].naam<<endl;
 
Laatst bewerkt:
post je volledige code nog es?
kan het zijn dat je ergens een player/players fout hebt gemaakt?

--Johan
 
het is eigenlijk de class genaamd weapon:
Code:
#ifndef WEAPON_H
#define WEAPON_H
#include <vector>
#include <string>
using namespace std;
class weapon
{
      public:
             static vector<weapon*> weapons;
             string name;
             int damage[2];
             int value;
             weapon(string getname="",int mindam=0,int maxdam=0,int price=0);
};
#endif
en de constructor:
Code:
#include "weapon.h"
using namespace std;
weapon::weapon(string getname,int mindam,int maxdam,int price)
{
                      name=getname;
                      damage[0]=mindam;
                      damage[1]=maxdam;
                      value=price;
                      weapons.push_back(this);
}
 
ben ik weer :P

wrm heb je hem static gemaakt?
wrm heb je een vector met pointers? kun je niet beter push_back(*this) gebruiken?
probeer eens weapon.weapons.push_back (k weet niet hoe static werkt maar dit lijkt me logisch)
wrm haal je de vector niet uit de class? dat zou het zoveel makkelijker maken
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan