Avatar billede coldray Nybegynder
29. november 2004 - 23:29 Der er 14 kommentarer og
1 løsning

Newbieproblemer indenfor STL

Har følgende kode:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>

using namespace std;

// Klasse til hver ting.
class displayItem {
public:
    char cNavn[255];
    char cStatus[255];
};

int main()
{
    vector<string> vTitler;
    vector<string> vStatus;

    vTitler.insert (vTitler.begin(), "Spiderman");
    vTitler.insert (vTitler.begin(), "Spiderman 2");

    vStatus.insert (vStatus.begin(), "På lager.");
    vStatus.insert (vStatus.begin(), "På lager.");

    int taeller = 0;

    while (taeller < vTitler.size())
    {
        displayItem cItem[taeller];
        cItem[taeller].cNavn = "test";
        cItem[taeller].cStatus = "test";
    }

    return 0;
}

Idéen er at for hver enkelt ting i vektoren vTitler, skal der oprettes et objekt af klassen displayItem, som indeholder de enkelte oplysninger om tingen (som fremgår af koden)..

Jeg er ny indenfor området (C++ generelt), og har derfor brug for hjælp ;)

Den returnerer følgende fejl:
F:\MyProjects\class\class.cpp(31) : error C2057: expected constant expression
F:\MyProjects\class\class.cpp(31) : error C2466: cannot allocate an array of constant size 0
F:\MyProjects\class\class.cpp(31) : error C2133: 'cItem' : unknown size
F:\MyProjects\class\class.cpp(32) : error C2440: '=' : cannot convert from 'char [5]' to 'char [255]'
        There is no context in which this conversion is possible
F:\MyProjects\class\class.cpp(33) : error C2440: '=' : cannot convert from 'char [5]' to 'char [255]'
        There is no context in which this conversion is possible

Desuden skal "test" konverteres til de enkelte elementer fra vektoren - jeg har bare ikke lige nogle forslag til hvordan.
Avatar billede coldray Nybegynder
29. november 2004 - 23:30 #1
glemte lige taeller++ i while-løkken
Avatar billede arne_v Ekspert
29. november 2004 - 23:34 #2
Prøv:

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <fstream>

using namespace std;

// Klasse til hver ting.
class displayItem {
public:
    char cNavn[255];
    char cStatus[255];
};

int main()
{
    vector<string> vTitler;
    vector<string> vStatus;

    vTitler.insert (vTitler.begin(), "Spiderman");
    vTitler.insert (vTitler.begin(), "Spiderman 2");

    vStatus.insert (vStatus.begin(), "På lager.");
    vStatus.insert (vStatus.begin(), "På lager.");

    int taeller = 0;

    displayItem cItem[vTitler.size()];
    while (taeller < vTitler.size())
    {
        strcpy(cItem[taeller].cNavn,"test");
        strcpy(cItem[taeller].cStatus,"test");
    }

    return 0;
}
Avatar billede arne_v Ekspert
29. november 2004 - 23:35 #3
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <fstream>

using namespace std;

// Klasse til hver ting.
class displayItem {
public:
    char cNavn[255];
    char cStatus[255];
};

int main()
{
    vector<string> vTitler;
    vector<string> vStatus;

    vTitler.insert (vTitler.begin(), "Spiderman");
    vTitler.insert (vTitler.begin(), "Spiderman 2");

    vStatus.insert (vStatus.begin(), "På lager.");
    vStatus.insert (vStatus.begin(), "På lager.");

    int taeller = 0;

    displayItem cItem[vTitler.size()];
    while (taeller < vTitler.size())
    {
        strcpy(cItem[taeller].cNavn, vTitler[taeller].c_str());
        strcpy(cItem[taeller].cStatus, vStatus[taeller].c_str());
    }

    return 0;
}
Avatar billede arne_v Ekspert
29. november 2004 - 23:36 #4
Men jeg tror at du skulle ændre de char [255] til at være string !
Avatar billede coldray Nybegynder
29. november 2004 - 23:38 #5
Din kode returnerer stadig 3 fejl:

F:\MyProjects\class\class.cpp(30) : error C2057: expected constant expression
F:\MyProjects\class\class.cpp(30) : error C2466: cannot allocate an array of constant size 0
F:\MyProjects\class\class.cpp(30) : error C2133: 'cItem' : unknown size
Avatar billede arne_v Ekspert
29. november 2004 - 23:41 #6
Har du lavet alle de rettelser jeg har lavet ?

displayItem cItem[vTitler.size()];
Avatar billede coldray Nybegynder
29. november 2004 - 23:42 #7
yep.. kopierede koden direkte
Avatar billede coldray Nybegynder
29. november 2004 - 23:43 #8
displayItem cItem[vTitler.size()];  <-- linje 30
Avatar billede arne_v Ekspert
29. november 2004 - 23:44 #9
displayItem *cItem = new displayItem[vTitler.size()];
   
    while (taeller < vTitler.size())
    {
        strcpy(cItem[taeller].cNavn, vTitler[taeller].c_str());
        strcpy(cItem[taeller].cStatus, vStatus[taeller].c_str());
    }
Avatar billede coldray Nybegynder
30. november 2004 - 00:03 #10
smid et svar :)
Avatar billede arne_v Ekspert
30. november 2004 - 00:04 #11
svar
Avatar billede segmose Nybegynder
30. november 2004 - 10:12 #12
while (taeller < vTitler.size()) {
  strcpy(cItem[taeller].cNavn, vTitler[taeller].c_str());
  strcpy(cItem[taeller].cStatus, vStatus[taeller].c_str());
  ++taeller; // ellers kommer vi vil ikke videre?
}
Avatar billede arne_v Ekspert
30. november 2004 - 10:26 #13
he he - der var lige en lille pointe !
Avatar billede coldray Nybegynder
30. november 2004 - 10:51 #14
segmose: korrekt, det var også det jeg selv skrev i min første kommentar
Avatar billede segmose Nybegynder
01. december 2004 - 11:11 #15
Så langt tilbage var der ingen af os der kunne husk! :)
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