Metoda w dynamicznie alokowanej strukturze
Ostatnio zmodyfikowano 2016-09-18 00:29
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 #include "cstdint" #include "item.hpp"
struct Owner { Item * Backpack[ 1024 ]; uint32_t ItemCount = 0; double TotalValue; ~Owner(); double CalculateVal(); void InsertItem( Item * pItem ); };
SOURCE #include "owner.hpp" #include "cstdio"
Owner::~Owner() { for( int i = 0; i < 1024; i++ ) delete Backpack[ i ]; }
double Owner::CalculateVal() { TotalValue = 7; printf( "%d\n", TotalValue ); return TotalValue; }
void Owner::InsertItem( Item * pItem ) { Backpack[ ItemCount ] = pItem; ItemCount++; }
Potem w main: uint16_t Users = atoi( argv[ 1 ] ); Owner * pOwner = new Owner[ Users ]; pOwner[ 0 ].CalculateVal();
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 |
|
mateczek |
» 2016-09-18 00:18:37 nie znam się na printf ale mi działa !!! #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; 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(); }
|
|
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. |
|
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 :) |
|
karambaHZP |
» 2016-09-18 00:29:49 |
|
« 1 » |