Avatar billede limes_planum Praktikant
04. januar 2014 - 12:26 Der er 8 kommentarer

Hvad er "non-class type" i forbindelse med enum-access og char-pointer?

Jeg har denne kode, og vil gerne assigne de to værdier (suit og vlaue) til en kortspils-vektor:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

typedef struct card{
enum suit {hearts, diamonds, clubs, spades};
const char* cardValues[];
int value;
}card;

const char* cardValues[] = {
    "hearts",
    "diamonds",
    "clubs",
    "spades"
};

int main()
{
vector<string> cardVector;
card * tempCard = new card();

    //write out card game:
    for(int j=0; j<4; j++){
            for(int i=1; i<14; i++){
                    tempCard->cardValues[j];
                    //tempCard->suit = j;
                    tempCard->value = i;
                    //card.suit = j;
                    //card.value = i;
                cardVector.assign((tempCard->cardValues).str()+(tempCard->value).str());
            cout << cardVector.push_back(); << endl;
            }
        }
    return 0;
}

- - -

Af dette får jeg denne første linje i min fejlmeddelse:
...error: request for member 'str' in 'tempCard->card::cardValues', which is of non-class type 'const char* [0]'|

Hvorfor?
Avatar billede arne_v Ekspert
04. januar 2014 - 15:16 #1
cardValues er en char[] og du kan ikke kalde str() paa en char[]

jeg gaetter paa at .str() bare skal slettes
Avatar billede limes_planum Praktikant
05. januar 2014 - 15:07 #2
ok, prøvede det:
error: no matching function for call to 'std::vector<std::basic_string<char> >::assign(const char**)'|
Avatar billede arne_v Ekspert
05. januar 2014 - 15:49 #3
hvad med:

cardVector.assign(string(tempCard->cardValues) + string(tempCard->value));
Avatar billede arne_v Ekspert
05. januar 2014 - 15:50 #4
no - det passer heller ikke med assign

hvad vil du med den kode?
Avatar billede limes_planum Praktikant
05. januar 2014 - 18:13 #5
to be honest, så er det en del af nogle eksamensforberedelser - men da eksemplet er ret klassisk, giver det ret god mening herinde [spurgte også om noget lignende inde på stack overflow, og der gik de meltdown over at det havde studie-relationer :-/ ]

Kernen i det er at jeg gerne vil tilgå/assigne suit-enumen sammen med value'en, for derefter at lægge dem ind på en samlet vector-plads (evt. ved at concate dem først måske, nu jeg tænker over det?)

Har googlet mig frem til en masse eksempler på hvordan man instantierer både struct og enum -> men kun hver for sig ... her kræver opgaven at man bruger struct'en og enum i samme kodestump (desværre er workarounds ikke mulige -> opgaven lyder som ovenstående)
Avatar billede arne_v Ekspert
05. januar 2014 - 18:22 #6
altsaa som jeg laeser dokumentatione er der to overloads af assign - begge med 2 argumenter

hvilken af de to tilsigter du at bruge og med hvilke vaerdier?
Avatar billede limes_planum Praktikant
05. januar 2014 - 18:55 #7
hov, hvad? ... er netop har gået fra CodeBlocks over til  MS Visual Studio, hvor den helt samme kode nu også brokker sig over linjen;

const char* cardValues[];

... ved ikke rigtig hvordan jeg skal tackle den herfra - lukker eventuelt snart spørgsmålet, med mindre du har en kommentar/løsning?
Avatar billede limes_planum Praktikant
05. januar 2014 - 19:17 #8
Vedr. dit svar (kommentar #6) - så kigger jeg lige på det først - skrev kommentar #7 før jeg læste #6
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

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