Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Metoda w dynamicznie alokowanej strukturze

Ostatnio zmodyfikowano 2016-09-18 00:29
Autor Wiadomość
AnusIsRael
Temat założony przez niniejszego użytkownika
Metoda w dynamicznie alokowanej strukturze
» 2016-09-18 00:03:53
Witam,
mam taką oto strukturę:
HEADER
C/C++
#include "cstdint"
#include "item.hpp"

struct Owner
{
    Item * Backpack[ 1024 ];
    uint32_t ItemCount = 0;
    double TotalValue;
   
    ~Owner();
    double CalculateVal();
    void InsertItem( Item * pItem );
};
SOURCE
C/C++
#include "owner.hpp"
#include "cstdio"

Owner::~Owner()
{
    for( int i = 0; i < 1024; i++ )
         delete Backpack[ i ];
   
}

double Owner::CalculateVal()
{
    TotalValue = 7;
    /*for(int i=0; i<ItemCount; i++)
    {
    TotalValue+=Backpack[i]->Value;
    }*/
    printf( "%d\n", TotalValue );
    return TotalValue;
}

void Owner::InsertItem( Item * pItem )
{
    Backpack[ ItemCount ] = pItem;
    ItemCount++;
}

Potem w main:
C/C++
uint16_t Users = atoi( argv[ 1 ] ); //Generalnie dowolna liczba całkowita
Owner * pOwner = new Owner[ Users ];
pOwner[ 0 ].CalculateVal(); //Wypisuje zero
I w tym właśnie problem, jakkolwiek bym nie ustawił TotalValue w metodzie CalculateVal() to i tak dostanę zero, czy to zwracane, czy nawet wypisując na standardowe wyjście w samej metodzie.
Jestem otwarty na wszelkie sugestie :v
Pozdrawiam.
EDIT: Kompiluje TDM-GCC 5.1.0 pod win 10 x64, flagi -O3 -std=c++14
EDIT2: Tam oczywiście ma być pOwner, literówka :v
P-151792
mateczek
» 2016-09-18 00:18:37
nie znam się na printf ale mi działa !!!
C/C++
#include <iostream>
using namespace std;


struct Owner
{
    int * Backpack[ 1024 ];
    uint32_t ItemCount = 0;
    double TotalValue;
   
    ~Owner();
    double CalculateVal();
    void InsertItem( int * pItem );
};
Owner::~Owner()
{
    for( int i = 0; i < 1024; i++ )
         delete Backpack[ i ];
   
}

double Owner::CalculateVal()
{
    TotalValue = 7;
    /*for(int i=0; i<ItemCount; i++)
        {
        TotalValue+=Backpack[i]->Value;
        }*/
    cout << TotalValue << endl;
    return TotalValue;
}

void Owner::InsertItem( int * pItem )
{
    Backpack[ ItemCount ] = pItem;
    ItemCount++;
}
int main() {
    Owner * pOwner = new Owner[ 5 ];
    cout << pOwner[ 0 ].CalculateVal(); //Wypisuje 7 nawet 2 razy :P
}
P-151793
karambaHZP
» 2016-09-18 00:19:01
Owner[ 0 ].CalculateVal();
 ==>
pOwner[ 0 ].CalculateVal();

up: @mateczek: ty masz dobrze, a kolega @AnusIsReal ma źle w kodzie. Robi dereferencje z typu, a nie obiektu.
P-151794
AnusIsRael
Temat założony przez niniejszego użytkownika
» 2016-09-18 00:27:25
Z tym Owner zamiast pOwner to literówka przy skracaniu kodu do wiadomości, oczywiście tam mam pOwner.CalculateVal(), aczkolwiek po zamianie z printf na cout zadziałało. Ma ktoś pomysł dlaczego? :v
Dobra, już mam, %d nie oznacza double tylko signed integer, tam powinno być %f. Dzięki na pomoc i zamykam temat :)
P-151795
karambaHZP
» 2016-09-18 00:29:49
printf
d ==> f
P-151796
« 1 »
  Strona 1 z 1