/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Probl. brug af valarrray i structs c++
Fra : Dennis


Dato : 09-03-04 08:57

Hejsa

Jeg har tilsyendladende et fundamentalt forståelses problem som jeg
ikke har kunnet opklare.

Hvorfor kan jeg ikke skrive:

struct tVector{
valarray<int> tVector(3);
}

Men hvis jeg lader være med at definere størrelsen virker det:

struct tVector{
valarray<int> tVector;
}

Hvis der er nogle der kan kaste et lys over dette vil jeg da være
meget glad.

Mvh.
Dennis

 
 
Jonas Meyer (09-03-2004)
Kommentar
Fra : Jonas Meyer


Dato : 09-03-04 14:55

Dennis wrote:
> Hejsa
>
> Jeg har tilsyendladende et fundamentalt forståelses problem som jeg
> ikke har kunnet opklare.
>
> Hvorfor kan jeg ikke skrive:
>
> struct tVector{
> valarray<int> tVector(3);
> }
>
> Men hvis jeg lader være med at definere størrelsen virker det:
>
> struct tVector{
> valarray<int> tVector;
> }
>
> Hvis der er nogle der kan kaste et lys over dette vil jeg da være
> meget glad.

Du kan ikke initializer variable i klassen, hvor de er erklæret.
Det skal du gøre i dine konstruktører:

struct tVector
{
int a;
valarray< int > v;

tVector() : v( 3 ) //initializer v
{
}
tVector( const tVector& other ) : a( other.a ), v( other.v )
{
}
};

mvh Jonas

Mogens Hansen (09-03-2004)
Kommentar
Fra : Mogens Hansen


Dato : 09-03-04 20:37

Dennis" <digger1@mailme.dk> wrote:

[8<8<8<]
> Hvis der er nogle der kan kaste et lys over dette vil jeg da være
> meget glad.

Dit problem er ikke specielt relateret til valarray - derfor vil jeg bruge
"std::vector" i det følgende i stedet for (den kender jeg bedre og den er
mere almindelig brugt).

Hvis du har en funktion
void foo()
{
vector<int> v(3);
}

sker der det at der bliver oprettet et object kaldet "v" af typen
"std::vector<int>".
Måden det bliver oprettet på er at der bliver kald en constructor der tager
en int (en type der kan konverteres fra int) med værdien 3 som parameter.
Det vil sige at det er constructoren
vector(size_type n, const T& value = T(), const Allocator& = Allocator());
bliver kaldt og oprettet en vector<int> med 3 elementer der hver har
værdien 0.

Når du har en "struct" eller "class" erklæring
struct foo
{
vector<int> v;
};
siger du blot at structuren "foo" har et datamedlem der hedder "v" og har
typen "std::vector<int>" - du siger ikke noget om hvordan "v" bliver
oprettet, for det kan blive oprettet på flere måder og det er
constructorens opgave at sige hvordan den bliver oprettet.

foo kan have flere forskellige constructorer:
struct foo
{
foo(); // default constructor
foo(int n);
foo(int* begin, int* end);

vector<int> v;
};

foo::foo() :
v() // default construct the vector - superfloush
{
}

foo::foo(int n) :
v(n)
{
}

foo::foo(int* begin, int* end) :
v(begin, end)
{
}

Det giver således ikke nogen mening at initialisere "v" i klasse-erklæringen
- det bliver klaret af constructorene.

Bemærk iøvrigt der er væsentlig forskel på initialisering og tildeling i
C++.


Derimod kan man initialisere en "static const" variabel i klasse
erklæringen:
class foo
{
static const int i = 3;
};


Venlig hilsen

Mogens Hansen



Dennis (12-03-2004)
Kommentar
Fra : Dennis


Dato : 12-03-04 21:20

> Dit problem er ikke specielt relateret til valarray - derfor vil jeg bruge
> "std::vector" i det følgende i stedet for (den kender jeg bedre og den er
> mere almindelig brugt).
>
> Hvis du har en funktion
> void foo()
> {
> vector<int> v(3);
> }
>
> sker der det at der bliver oprettet et object kaldet "v" af typen
> "std::vector<int>".
> Måden det bliver oprettet på er at der bliver kald en constructor der tager
> en int (en type der kan konverteres fra int) med værdien 3 som parameter.
> Det vil sige at det er constructoren
> vector(size_type n, const T& value = T(), const Allocator& = Allocator());
> bliver kaldt og oprettet en vector<int> med 3 elementer der hver har
> værdien 0.
>
> Når du har en "struct" eller "class" erklæring
> struct foo
> {
> vector<int> v;
> };
> siger du blot at structuren "foo" har et datamedlem der hedder "v" og har
> typen "std::vector<int>" - du siger ikke noget om hvordan "v" bliver
> oprettet, for det kan blive oprettet på flere måder og det er
> constructorens opgave at sige hvordan den bliver oprettet.

Så blev jeg da lidt kloger

Takker mange gange

Dennis

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste