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

[C++] Visual Studio 2013 - rebuild solution

Ostatnio zmodyfikowano 2015-07-25 15:00
Autor Wiadomość
Roofy5
Temat założony przez niniejszego użytkownika
[C++] Visual Studio 2013 - rebuild solution
» 2015-07-25 12:57:12
Witam!

Mam pewien problem z programem Visual Studio 2013

Otóż tworzę sobie klasę:
C/C++
//Plik Liczba.h
class CLiczba
{
private:
    double czescA;
    double czescB;
public:
    CLiczba( double = 0, double = 0 ); //Konstruktor z argumentami domyslnymi
    void SayHello();
   
};

Mam w niej konstruktor z argumentami domyślnymi. Teraz jego definicja w osobnym pliku:

C/C++
//plik Liczba.cpp
#include "Liczba.h"
#include <iostream>

using namespace std;

CLiczba::CLiczba( double czescA, double czescB )
{
    this->czescA = czescA;
    this->czescB = czescB;
}

void CLiczba::SayHello()
{
    cout << "Jestem sobie liczba, A = " << czescA << " B = " << czescB << endl;
}

Teraz w mainie (także osobny plik) tworzę sobie trzy obiekty:

C/C++
#include <iostream>
#include "Liczba.h"

int main()
{
    CLiczba obiektA;
    CLiczba obiektB( 1.5 );
    CLiczba obiektC( 2, 3 );
   
    obiektA.SayHello();
    obiektB.SayHello();
    obiektC.SayHello();
   
    system( "pause" );
}

Konstruktor domyślnie dla pierwszego obiektu inicjuje jego pola liczbami 0, a dla drugiego obiektu, tylko drugie pole jest zerem.

Teraz mój problem - wszystko pięknie działa dopóki w deklaracji klasy (Liczba.h) nie zmienię wartości w konstruktorze na np.
C/C++
CLiczba( double = 5.5, double = 0 ); //Konstruktor z argumentami domyslnymi
 
Program po przekompilowaniu dalej uzupełnia pola obiektów zerami. Omęczyłem się z tym - myślałem że źle deklaruje ten konstruktor (dopiero się uczę obiektówki). W przypływie beznadzieji przypomniałem sobie że jest coś takiego jak "Rebuild Solution" (w menu: BUILD -> Rebuild Solution). Kiedy "przebudowałem" mój program konstruktor zaczął działać poprawnie - przypisuje już zmienioną wartość. Dodam że po każdej kolejnej zmianie tej wartości muszę ponownie "przebudowywać" program.

I teraz moje pytanie - dlaczego tak się dzieje i czy można to jakoś obejść? Wszystkie pliki po zmianie danych zapisywałem więc myślałem że to wystarczy. Przeraża mnie fakt, że mogę w przyszłości ślęczeć nad jakimś błędem w kodzie przez wiele godzin, będąc pewnym że wszystko jest OK, a na końcu może się okazać, że to tylko wina środowiska...
P-135199
carlosmay
» 2015-07-25 13:11:26
Ten typ tak ma.
Też tak kiedyś miałem.
Mam już nawyk po kazdej dużej zmianie przebudować kompilacje.
Dla jednoplikowych nie ma większego problemu.
Samo f5 nie zawsze daje to czego oczekujemy.

edit: Zrób mały eksperymant.
Zmień w programie coś, żeby wywaliło błąd.
Wybierasz opcje Build Solution.
Kompilator wykrywa błąd i dalej nic nie zmienia.
Teraz dajesz klawisz F5 i program odpala z plików istniejących w folderze projektu.
Są to stare pliki sprzed zmian.
Często tak jest dla złożonych projektów.
P-135200
Roofy5
Temat założony przez niniejszego użytkownika
» 2015-07-25 13:44:13
Dzięki @carlosmay ;)
Martwi mnie tylko to jak w przyszłości ochronić się przed takim czymś... na to chyba nie ma rozwiązania :(
P-135202
carlosmay
» 2015-07-25 15:00:41
Nie jest "przypadłość" Visual'a. Inne środowiska też robią takie historie.
Trzeba pilnować tego co się robi i będzie w porządku.
Dwa kliknięcia więcej.
P-135207
« 1 »
  Strona 1 z 1