04. maj 2004 - 20:20Der er
5 kommentarer og 1 løsning
Container til at indeholde et antal bytes der skal transporteres
imellem klasser. Jeg sidder med et problem jeg ikke selv kan løse. Jeg har to klasser hvor den ene kalder en funktion i den anden med en struktur der bl.a. indeholder et char-array. Dette array skal jeg ændre lidt i og returnerer, det giver nogle besværligheder jeg gerne vil være fri for. Derfor tænkte jeg om det ikke er muligt i c++ at lave en container der kan indeholde et bestemt antal bytes som funktioner kan tage som argument og returnere. Tanken var at man kunne malloc'e plads (x antal bytes) og derefter bare smide data i denne container med pointere. Men jeg er ikke klar over hvordan jeg skal programmere det, så hvis i kunne hjælpe ville jeg blive glad.
Jeg forsøger lige at præcisere og uddybe problemet. Jeg har som sagt to klasser, den ene kalder en funktion i den anden med en struktur der indeholder nogle ints og et char-array. Meningen er så at funktionen skal tilføje en int til strukturen og returnerer den som et char-array. Men der er lidt problemer med at returnerer et char-array, jeg risikerer jo at slutningen af arrayet bliver overskrevet når funktionen lukker og derved frigiver pladsen som resten af arrayet er på, altså det der ikke er pointer til første element. Derfor ville jeg gerne have en form for container hvori jeg kunne smide diverse variable, denne container skulle så ligge et bestemt sted i lageret og en pointer kunne så smides med til funktionen og funktionen kunne så smide en int i containeren og returnere pointeren. Men jeg er ikke klar over hvordan det skal gøres smart. Jeg har tænkt på bare at malloc'e 500 bytes og så have en pointer til første tomme sted i den chunk, men jeg ved ikke om det er den smarteste måde at gøre det på.
Jeg har godt kigget på vector, men så vidt jeg forstår kan man ikke ligge forskellige typer i en vector.
Jeg er ikke sikker på jeg forstår: "Meningen er så at funktionen skal tilføje en int til strukturen og returnerer den som et char-array. Men der er lidt problemer med at returnerer et char-array, jeg risikerer jo at slutningen af arrayet bliver overskrevet når funktionen lukker og derved frigiver pladsen som resten af arrayet er på, altså det der ikke er pointer til første element."
Man kan lave en generisk class der kan indeholde hvad som helst og så lave en vector med elementer af denne type:
#include <vector> #include <iostream>
using namespace std;
class GenType { public: GenType() { } GenType(int i) { Type = int_type; Value.i = i; } GenType(double d) { Type = double_type; Value.d = d; }
enum { int_type, double_type, }Type; union { int i; double d; }Value; };
ostream &operator << (ostream &os, GenType &c) { switch(c.Type) { case GenType::int_type: os << c.Value.i; break; case GenType::double_type: os << c.Value.d; break; } return os; }
Undskyld jeg ikke er vendt tilbage før, jeg valgte at malloce plads da det for mig at se blev det mest simple. Hvis du vil ligge et svar får du nogle point.
Okay, men tak for hjælpen. Af en eller anden mærkelig grund har jeg ikke fået email da du har givet sidste kommentar.
Synes godt om
Ny brugerNybegynder
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.