Avatar billede moejensen Nybegynder
29. november 2001 - 09:49 Der er 5 kommentarer og
1 løsning

Problemer med navne i instanser.

Jeg er ved at lave et kryds og bolle spil, hvor jeg laver to instanser af klassen spiller. Klassen spiller ser således ud:

// Spiller.cpp: implementation of the Spiller class.
//
//////////////////////////////////////////////////////////////////////

#include \"Spiller.h\"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Spiller::Spiller()
{
}

Spiller::~Spiller()
{
}

char Spiller::getBrik()
{
    return brik;
}

char * Spiller::getNavn()
{
    return navn;
}

void Spiller::setNavn(char * n)
{
    navn = n;
}

void Spiller::setBrik(char b)
{
    brik = b;
}

int Spiller::getAntalBrikker()
{
    return antalBrikker;
}

void Spiller::setAntalBrikker(int a)
{
    antalBrikker = a;
}

I min kontrol klasse laver jeg instanserne spiller1 og spiller2, og på dem gør jeg følgende:

spiller1.setNavn(mySkaerm.spillerNavn());
spiller1.setBrik(\'X\');
spiller1.setAntalBrikker(3);

spiller2.setNavn(mySkaerm.spillerNavn());
spiller2.setBrik(\'X\');
spiller2.setAntalBrikker(3);

Mit probem er så at når spillet starter og jeg henter spiller navn ved metoden getNavn, så får jeg altid spiller 2\'s navn. Det ser ud til når jeg indskriver spiller to\'s navn, så overskriver den også spiller et\'s. Sikker fordi jeg ikke får flyttet pointeren. Men jeg kan ikke få løst problemet, er der nogen der kan hjælpe mig??
Avatar billede soepro Nybegynder
29. november 2001 - 10:00 #1
Du har helt ret - det er fordi din navne pointer er gal. Problemet opstår i

void Spiller::setNavn(char *s)
{
  navn = n;
}

fordi du her sætter din char* til at pege på den overførte parameter, fremfor at flytte indholdet:

void Spiller::setNavn(char * n)
{
  strncpy(navn, n, sizeof(navn)-1);
}
  strncpy(navn, s, sizeof(navn)-1);
Avatar billede soepro Nybegynder
29. november 2001 - 10:01 #2
Ooops - den sidste strncpy skal selvfølgelig ikke med. strncpy kræver #include <string> eller #include <stdio>
Avatar billede moejensen Nybegynder
29. november 2001 - 10:09 #3
når jeg prøver at includere: #include <stdio>, så får jeg følgende fejl:
Spiller.cpp(7) : fatal error C1083: Cannot open include file: \'stdio\': No such file or directory

og hvis undlader den, går programmet ned, når jeg indtaster spillerenes navne.
Avatar billede moejensen Nybegynder
29. november 2001 - 10:31 #4
Jeg tror jeg har fundet ud af det, jeg får i hvert fald ingen fejl når jeg skriver #include <cstdio>, men programet går stadig ned.
Avatar billede moejensen Nybegynder
29. november 2001 - 11:48 #5
Har selv løst problemet.
Avatar billede soepro Nybegynder
29. november 2001 - 12:44 #6
Du er jo dygtig ... men var det ikke en anden fejl du løste ! Man kvitterer normalt med point til dem som har svaret på dit spørgsmål - også selvom det betyder at du så kommer lidt længere og får et ANDET problem.
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