Argumenty wenątrz konstruktora <not available>

Odpowiedz Nowy wątek
2011-07-20 16:55
matek
0

Witam serdecznie, piszę mały projekt w Qt i napotkałem pewien problem, mianowicie:

posiadam pewną klasę "MainItem", w której implementuję między innymi dwie metody niemodyfikujące klasy oraz zwracające stałe referencje do pól tejże klasy:

class MainItem {
    public:
        (...)
        const QDateTime& from() const { return dtFrom; }
        const QDateTime& to() const { return dtTo; }
    private:
        QDateTime dtFrom;
        QDateTime dtTo;
        (...)
};

klasa ta jest dużo bardziej rozbudowana jednak pozostałe jej składowe nie mają wpływu w tej kwestii.

Pobieram obiekt powyższej klasy z QTableView (obecnie zaznaczony w tabeli) przy pomocy napisanej przeze mnie metody.

MainItem* selectedRow() const;

Działa ona dobrze gdyż używam jej bezproblemowo w innych miejscach w programie, więc nie będę podawał jej implementacji.

Próbuję utworzyć QDialog'a, który posiada między innymi konstruktor przedstawiony poniżej:

explicit HoursForm(const QDateTime&, const QDateTime&, QWidget *parent = 0);

Następnie tworzę go w pewnej metodzie (głównej klasy programu) i wywołuje tenże konstruktor:

void MainWindow::_slEdit()
{
    MainItem* item = mainItemTableView->selectedRow();
    Q_CHECK_PTR(item);
 
    HoursForm hoursForm(item->from(), item->to(), this);
    (...)
}

Jednak argumenty przekazane do konstruktora (czyli item->from(), oraz item->to()) są w nim "niedostępne"(debugger: <not available="available">) co w praktyce wygląda tak, że przechowują one jakieś śmieciowe dane i nie mam pojęcia dlaczego. Sprawdzałem przy pomocy debuggera dołączonego do QtCreatora zawartość tych obiektów i do momentu utworzenia "HoursForm" dokładniej jeszcze przed nim wskaźnik "item" oraz elementy na jakie wskazuje przechowują prawidłowe dane, natomiast wewnątrz konstruktora dane te nie są już prawidłowe. Czy mógłbym w związku z tym prosić was o podanie możliwych powodów takiego zachowania? Za wszelkie odpowiedzi będę bardzo wdzięczny.

pozdrawiam.

Pozostało 580 znaków

2011-07-20 17:14
0

rozumiem, że nie masz problemu z samym kodem, ale z debuggerem.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-07-20 17:32
matek
0
MarekR22 napisał(a)

rozumiem, że nie masz problemu z samym kodem, ale z debuggerem.

Podczas testowania programu również to występuje. Dostaje Segmentation fault'a - przez te argumenty jak mniemam.

Pozostało 580 znaków

2011-07-20 19:31
0

A użycie tych funkcji gdzieś indziej także powoduje błąd?Bo to są jakieś kurde czary,sprawdzałem Twój kod na VS2003 z integratorem i działa bez dąsów


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-07-20 19:32

Pozostało 580 znaków

2011-07-20 20:42
matek
0

Coś musi być z tym konstruktorem, bo posiadam w tej klasie (po QDialog) inny konstruktor jeszcze:

explicit HoursForm(QWidget *parent = 0, const QDate& = QDate());

i wywołuje go tak (w tej samej metodzie co wyżej, zmieniłem po prostu wcześniejsze wywołanie:

 
    MainItem* item = mainItemTableView->selectedRow();
    Q_CHECK_PTR(item);
 
    HoursForm hoursForm(this, item->from().date());
   // HoursForm hoursForm(item->from(), item->to(), this);
    hoursForm.exec();

zaznaczam ten sam item w QTableView i wszystko działa. Próbowałem również przekazać zamiast "item->from()", "item->to()" i również działa. Nie mam pojęcia dlaczego w tym wypadku ten obiekt jest poprawnie przekazywany, a w drugim mam problem :] No trudno pokombinuje jeszcze, jak dojdę do tego to napisze. Dzięki :)

Pozostało 580 znaków

2011-07-20 22:33
matek
0

nie wierzę... wyczyściłem projekt, przebudowałem na nowo i działa. Nie mam pojęcia dlaczego wcześniej nie śmigało, może wcześniejsze próby coś napsociły i od pewnego momentu kompilowało mi nie to co chciałem? Nie wiem. W każdym razie dziękuje za zainteresowania i odpowiedzi :)
pozdrawiam serdecznie.

Pozostało 580 znaków

2011-07-21 20:23
0

Jeśli piszesz pod Qt Creatorem, to mogło się zdarzyć, że Twojemu IDE coś się pochrzaniło z shadow buildem -- Qt Creator ostatnio ma często z tym problemy.

to nie problem z shadow buildem, dane cache'owane przez kompilator nie są prawidłowo aktualizowane, wtedy dzieją się takie cuda. Niestety dzieje się to niezależnie od IDE, budowanie z wiersza poleceń też może mieć taki sam problem. To jest problem gcc, ale w innych kompilatorach też doświadczałem takich problemów. - MarekR22 2011-07-22 09:28

Pozostało 580 znaków

2011-07-21 22:39
matek
0

korzystałem z QtCreatora i rzeczywiście budowałem w osobnym katalogu :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0