Kezdőoldal » Számítástechnika » Programozás » Ez miért nem jó? C++

Ez miért nem jó? C++

Figyelt kérdés

//main.cpp

# include <iostream>

# include <stdlib.h>


typedef unsigned short ushort;

typedef unsigned int uint;


using std::cout;

using std::cin;

using std::endl;

using std::string;


class PROBA

{

public:

PROBA();

PROBA(PROBA&);

~PROBA();

};


PROBA::PROBA()

{cout <<"Konstruktor \n";}


PROBA::PROBA(PROBA&)

{cout <<"Copy Konstruktor \n";}


PROBA::~PROBA()

{cout <<"Destruktor \n";}



PROBA FunctionOne(PROBA TheProba);

PROBA* FunctionTwo(PROBA *TheProba);


int main()

{

PROBA Proba1;

cout <<"Call FunctionOne \n";

FunctionOne(Proba1);

cout <<"Call FunctionTwo \n";

FunctionTwo(&Proba1);


return EXIT_SUCCESS;

}


PROBA FunctionOne(PROBA TheProba)

{cout <<"FunctionOne returning \n"; return TheProba;}


PROBA* FunctonTwo(PROBA *TheProba)

{cout <<"FunctionTwo returning \n"; return TheProba;}



.....................................

Hibaüzenet:Undefined reference to 'FunctionTwo(PROBA*)'


2012. febr. 25. 02:50
 1/4 A kérdező kommentje:
Már tudom egy kur*va i betű hiányzott.Ez miatt ment el több órám.
2012. febr. 25. 02:54
 2/4 A kérdező kommentje:

És így miért nem jó?

//main.cpp

# include <iostream>

# include <stdlib.h>


typedef unsigned short ushort;

typedef unsigned int uint;


using std::cout;

using std::cin;

using std::endl;

using std::string;


class PROBA

{

public:

PROBA();

PROBA(PROBA&);

~PROBA();

};


PROBA::PROBA()

{cout <<"Konstruktor. \n";}


PROBA::PROBA(PROBA&)

{cout <<"Copy Konstruktor. \n";}


PROBA::~PROBA()

{cout <<"Destruktor. \n";}



const PROBA FunctionOne(const PROBA TheProba);

PROBA* FunctionTwo(PROBA *TheProba);


int main()

{

PROBA Proba1;

cout <<"Call FunctionOne. \n";

FunctionOne(Proba1);

cout <<"\nCall FunctionTwo. \n";

FunctionTwo(&Proba1);


return EXIT_SUCCESS;

}


const PROBA FunctionOne(const PROBA TheProba)

{cout <<"FunctionOne returning. \n"; return TheProba;}


PROBA* FunctionTwo(PROBA *TheProba)

{cout <<"FunctionTwo returning. \n"; return TheProba;}


//const PROBA FunctionOne(const PROBA TheProba) E függvény miatt nem akar lefordulni mert const tettem a bemenő paraméter elé.Ezzel azt szerettem volna el érni,hogy ne tudjak a TheProba-t felül írni egy másik objektummal.

2012. febr. 25. 03:02
 3/4 iostream ***** válasza:

Gondolom prog.hu-ra is te raktad be ezt. Ott még elsakkozgattatok volna egy darabig, mire rájössz, hogy be kell másolni az összes releváns kódot, itt a másoló konstruktor a hibás. A másoló konstruktor deklarációja mindig így nézzen ki T típus esetén:

T(const T&);

2012. febr. 25. 08:16
Hasznos számodra ez a válasz?
 4/4 iostream ***** válasza:

"Szia.

Léci ki fejtenéd bővebben,hogy miért így nézzen ki mindig a másoló konstruktor.

Köszike :)"


Nos, ha eltekintünk a nyelvtani hibáktól, azért kell így kinéznie elsősorban, mert a const T& többmindenre bindol, mint a sima T&. Például konstans objektumokra, de ami fontosabb, temporálisokra.

Tehát ha ilyet írsz, hogy:

const MyClass o1;

MyClass o2(o1);


Itt a másoló konstruktornak egy konstanst akarsz átadni. Ha nem konstanst vár, akkor nem fog tudni lefordulni, konstansból nem konvertálódik nem-konstanssá.

Másik: ha pl a string másoló konstruktorát konst nélkül írták volna meg, akkor ez a kód nem fordulna le:

std::string s1, s2;

std::string s3 = s1 + s2;


Ugyanis az s1 + s2 egy temporális, nem lehet rá normális referenciát állítani, csak konstanst.

2012. febr. 25. 09:26
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!