Drobne błędy w kodzie c++

0

Mam taki o to program przepisany z książki domyślam się, że nie działa iż był pisany pod inny kompilator mi musi działać w dev c++.
Poniżej dodaje kod programu

#include <iostream>

using namespace std;

class demo
{
      int x,y;
 public:
        //konstruktor 1 z 0, 1 lub 2 argumentami
        demo (int xx=1, int yy=0)
        {
             x = xx; y = yy;
             cout << "Konstruktor 1            : " << x << " "
                                                   << y << "\n";
        }
        
        demo(demo&); //konstruktor 2
        ~demo(); //destruktor 

        
        
};

demo::demo (demo & d)
{
           cout << "Konstruktor 2 (kopiujacy): " << d.x << " "
                                                 << d.y << "\n";
           x = d.x; y = d.y;
}

demo::~demo()
{
           cout << "Destruktor               : " << x << " " << y << "\n";
}


main()
{
      void fun (demo, demo *); //prototyp funkcji niezaleznej
      cout << "Poczatek main\n";
      demo a;
      demo b = 2;                           //błąd
      demo c = a;
      demo * adr = new demo (3, 3);
      fun (a, adr);
      demo d = demo (4, 4);             //błąd
      c = demo (5, 5);                     //błąd
      cout << "Koniec main\n";
      
      system("PAUSE");
}

void fun (demo d, demo * add)
{
     cout << "Wejscie do fun\n";
     delete add;
     cout << "Wyjscie z fun\n";
}
 

Błędy wyskakują na tych 3 linijkach które oznaczyłem przez komentarz. A o to co mówi kompilator:

42 C:\Users\macbook\Desktop\Programowanie\Zadanie.cpp no matching function for call to demo::demo(demo)' C:\Users\macbook\Desktop\Programowanie\Zadanie.cpp:25 candidates are: demo::demo(demo&) C:\Users\macbook\Desktop\Programowanie\Zadanie.cpp:25 demo::demo(int, int) 42 C:\Users\macbook\Desktop\Programowanie\Zadanie.cpp initializing temporary from result of demo::demo(int, int)'

Nie wiem jak to zmienić żeby zadziałało.

Tak przy okazji jeszcze w innym programie przy probie kompilacji wyskakuje taki 1 błąd w definicji (Program sklada sie z 3 plikow klasa.h, definicja.cpp i main.cpp). Zalozeniem programu jest podanie przez uzytkownika 20 liczb i sprawdzenie ile wśród tych 20 podanych jest liczb różnych.

int set_int::nalezy (int n)
{
    int i;
    //sprawdza czy n nalezy juz do zbioru 
    //jezeli tak to za petla i bedzie rowne lb_elem
    
    while ( (i<lb_elem) && (adtabw[i] 1=n) ) i++; //błąd
    
    
    return (i<lb_elem);
}

Błąd wyskakuje na zaznaczonej linijce //błąd
O to co pokazuje kompilator:

definicja.cpp In member function int set_int::nalezy(int)': definicja.cpp expected )' before numeric constant
definicja.cpp expected `)' before ';' token

chyba coś nie tak z tym 1=n. Nie wiem jak to inaczej zapisać żeby zadziałało.

Pozdrawiam i proszę o pomoc.

0

main powinna być typu int i zwracać 0 w przypadku powodzenia. Poza tym na pewno chcesz deklarować fun wewnątrz main?

0

nic nie daje zmiana main na typu int dalej to samo. To jest przykład książkowy kod nie jest moim wymysłem po prostu przepisany w taki sposób jak jest w książce wywala takie błędy widocznie jak fun jest wewnątrz funkcji main to tak musi byc

0

To masz w złym miejscu. Zajrzyj do książki powinien tam być opis, że to należy umieścić przed main()

void fun (demo, demo *); //prototyp funkcji niezaleznej
0

gdy umieszczę przed main

 void fun (demo, demo *); //prototyp funkcji niezaleznej

to dalej takie same błędy jak były wywala

0
Marcinex1990 napisał(a)

gdy umieszczę przed main

 void fun (demo, demo *); //prototyp funkcji niezaleznej

to dalej takie same błędy jak były wywala

Tego błędu już nie powinno być:
42 C:\Users\macbook\Desktop\Programowanie\Zadanie.cpp no matching function for call to demo::demo(demo)' `

Btw zmień kompilator np. na Code::Blocks

0

niestety jest dalej

0
 demo b;
b = 2;                           //błąd
      demo d(4, 4); 

a tak działa?

0

matek3005 no niby tak działa ale daje inny wynik niż pożądany

0

to przekaż do konstruktora kopiującego argument jako const. demo(const demo&); wtedy powinno działać (w wersji pierwotnej) tak jak tego oczekujesz.

0
matek3005 napisał(a)

to przekaż do konstruktora kopiującego argument jako const. demo(const demo&); wtedy powinno działać (w wersji pierwotnej) tak jak tego oczekujesz.

dokładnie o to chodziło ! Wielkie dzięki.

Pozostał mi jeszcze jeden problem

 
int set_int::nalezy (int n)
{
    int i;
    //sprawdza czy n nalezy juz do zbioru 
    //jezeli tak to za petla i bedzie rowne lb_elem
 
    while ( (i<lb_elem) && (adtabw[i] 1=n) ) i++; //błąd
 
 
    return (i<lb_elem);
}
 

Błąd wyskakuje na zaznaczonej linijce //błąd
O to co pokazuje kompilator:

definicja.cpp In member function int set_int::nalezy(int)': definicja.cpp expected )' before numeric constant
definicja.cpp expected `)' before ';' token

chyba coś nie tak z tym 1=n. Nie wiem jak to inaczej zapisać żeby zadziałało. Jakieś pomysły ?

0

1 zamień na ! ;)

0

na pierwszy rzut oka masz 1 zamiast ! w drugim warunku

0

tak to jest jak się siedzi za długo przed monitorem, moje niedopatrzenie, jeszcze raz dzięki panowie. Temat można zamknąć ;]

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