Avatar billede suntrip Nybegynder
16. december 2002 - 16:44 Der er 13 kommentarer og
1 løsning

Pointers

er ved at gå ud af mit gode skin over pointers.... :(

    std::list<Person*> object;
    std::list<Person*>::iterator constIterator;
    object.push_back(hero);
    object.push_back(Monster1);
    object.push_back(Monster2);
    object.push_back(Monster3);
    object.push_back(Monster4);

        for( constIterator = object->begin(); constIterator != object-> end(); constIterator++)
            constIterator.move();

fejl:

Base operand of '->' has non-pointer type ' std::list<Person*, std::allocator<Person*> >'

no matching funtion for call to std::_List_iterator<Person*, Person*&, Person**>::move()'

har en funktion som hedder move

håber der er nogen der kan hjælpe mig
Avatar billede soreno Praktikant
16. december 2002 - 16:48 #1
Du har ikke oprettet en pointer. Du skal bruge:

for( constIterator = object.begin(); constIterator != object.end(); constIterator++)
{
..
}
Avatar billede suntrip Nybegynder
16. december 2002 - 17:03 #2
oki.... :)

men hvad så med den sidste fejl... den med no matching......?
Avatar billede soreno Praktikant
16. december 2002 - 17:16 #3
heh, jeg har ikke lige testet men jeg formoder det må være:
constIterator->move();
Avatar billede suntrip Nybegynder
16. december 2002 - 17:19 #4
det må det gerne være....

ved ikk hvad fejlen er for jeg har en en funktion der hedder move i Class Person som er virtuel og så har jeg en funktion i Class player som hedder move også .. og det er den som skal bruges...

men den siger at den ikk findes.. :((
Avatar billede suntrip Nybegynder
16. december 2002 - 17:27 #5
Person *Princess = new Npc ( 3 , 100 , 100, 17+15 , 17+3 , 150, map, NULL);
   
Person *hero = new Player ( 2 , 100 , 100, 1+15 , 2+3 , map, Princess);
   
Person *Monster1 = new Npc ( 4 , 100 , 100, 3+15  , 31+3 , 200, map, hero);
Person *Monster2 = new Npc ( 5 , 100 , 100, 3+15  , 3+3  , 200, map, hero);
Person *Monster3 = new Npc ( 6 , 100 , 100, 31+15 , 3+3  , 200, map, hero);
Person *Monster4 = new Npc ( 7 , 100 , 100, 31+15 , 31+3 , 200, map, hero);
Avatar billede soreno Praktikant
16. december 2002 - 18:17 #6
Har du lidt kode til Person klassen (specielt omkring move metoden) ?
Avatar billede soreno Praktikant
16. december 2002 - 18:30 #7
Du gmmer en pointer til et Person objekt i din liste. Iteratoren returnere en pointer til objektet som der gennemløbes. Derfor er constIterator en pointer til en pointer til et Person objekt. Ergo må det være:
*constiterator->move();
Avatar billede suntrip Nybegynder
16. december 2002 - 18:42 #8
det er intet kode i Move() i Class person.....

koden er i min player klasse og i min npc klasse.....


og *constiterator->move(); hjalp ikk så meget :(

stadig samme fejl

no matching funtion for call to std::_List_iterator<Person*, Person*&, Person**>::move()'
Avatar billede soreno Praktikant
16. december 2002 - 19:10 #9
Ok, så holder jeg op med at gætte :-)
Jeg har lavet et eksempel som virker:

---------------KlasseA.h
#ifndef KLASSE_A
#define KLASSE_A
#include <stdio.h>

class KlasseA
{
    public:
        KlasseA();
        ~KlasseA();
        void move();
};

KlasseA::KlasseA() {}
KlasseA::~KlasseA() {}
void KlasseA::move()
{
    printf("Hello world fra KlasseA::move()\n");
}

#endif



---------------main.cpp
#include <iostream>
#include <list>

#include "KlasseA.h"

using namespace std;

int main(int argc, char **argv)
{
    KlasseA *obj1 = new KlasseA();
    KlasseA *obj2 = new KlasseA();
    KlasseA *obj3 = new KlasseA();
    KlasseA *obj4 = new KlasseA();

    list<KlasseA*> object;
    list<KlasseA*>::iterator iter;
   
    object.push_back(obj1);
    object.push_back(obj2);
    object.push_back(obj3);
    object.push_back(obj4);

    for(iter = object.begin();iter != object.end(); iter++)
    {
        KlasseA *temp = *iter;
        temp->move();
    }
   
    delete obj1;
    delete obj2;
    delete obj3;
    delete obj4;
   
    return 0;
}

Derfor må du kunne bruge:
for( constIterator = object.begin(); constIterator != object.end(); constIterator++)
{
  Person *temp = *constIterator;
  temp->move();
}
Avatar billede suntrip Nybegynder
16. december 2002 - 19:20 #10
tusind mange tak... nu kan jeg endelig komme videre :))))))
Avatar billede suntrip Nybegynder
16. december 2002 - 21:45 #11
håber at du vil hjælpe mig med det her også

    std::list<Person*> objMonster;
    std::list<Person*>::iterator constIterator2;
    objMonster.push_back(Monster1);
    objMonster.push_back(Monster2);
    objMonster.push_back(Monster3);
    objMonster.push_back(Monster4);

for( constIterator2 = objMonster.begin(); constIterator2 != objMonster.end(); constIterator2++){
Person *temp = *constIterator2;
hero->check_for_monster(temp);
            }

fejl..

no matching function for call person::check_for_monster(Person&)
Avatar billede suntrip Nybegynder
16. december 2002 - 21:46 #12
check for_monster returnere en værdi....
Avatar billede suntrip Nybegynder
16. december 2002 - 21:47 #13
check for monster lægger i Class player
Avatar billede soreno Praktikant
17. december 2002 - 10:16 #14
Player, Npc er subklasser af Person ?

Hvordan ser definitionen af:
person::check_for_monster ud ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester