Undefined function – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Undefined function – C / C++ – Fórum – Programujte.comUndefined function – C / C++ – Fórum – Programujte.com

 

Kowalsky
~ Anonymní uživatel
13 příspěvků
1. 2. 2011   #1
-
0
-

Dobrý den, mám tkový problém že když zadám tento kod tak mi to vypíše eror ve stylu "no matching function for call to Usecka...."
A porad nemuzu zjistit co s tim mam spatne. Kdyz zadam UseckaCara() tak se to sice zkompiluje ale vyjde z toho nakonec "Linker error undefined references to cara()" Poradite prosim nekdo?

class Bod

{
public:
Bod(int poziceX, int poziceY, int poziceZ);
~Bod();
private:
int poziceX;
int poziceY;
int poziceZ;
public:
int ziskejBod_poziceX() const;
int ziskejBod_poziceY() const;
int ziskejBod_poziceZ() const;
void zadejBod_poziceX(int a);
void zadejBod_poziceY(int a);
void zadejBod_poziceZ(int a);
};


//konstruktor a destruktor
Bod::Bod(int poziceX, int poziceY, int poziceZ)
{
poziceX=poziceX;
poziceY=poziceY;
poziceZ=poziceZ;
};
Bod::~Bod()
{};



int Bod::ziskejBod_poziceX()const
{
return poziceX;
};
int Bod::ziskejBod_poziceY()const
{
return poziceY;
};
int Bod::ziskejBod_poziceZ()const
{
return poziceZ;
};


void Bod::zadejBod_poziceX(int a)
{
poziceX=a;
};
void Bod::zadejBod_poziceY(int a)
{
poziceY=a;
};
void Bod::zadejBod_poziceZ(int a)
{
poziceZ=a;
};


class Usecka
{
private:
Bod zacatek;
Bod konec;
int delka;
public:
Bod ziskejUsecka_bodzacatek() const;
Bod ziskejUsecka_bodkonec() const;
int ziskejUsecka_intdelka() const;
void zadejUsecka_bodzacatek(Bod zacatek);
void zadejUsecka_bodkonec(Bod konec);
void zadejUsecka_intdelka(int delka);
};



Bod Usecka::ziskejUsecka_bodzacatek()const
{
return zacatek;
};
Bod Usecka::ziskejUsecka_bodkonec()const
{
return konec;
};
int Usecka::ziskejUsecka_intdelka()const
{
return delka;
};
void Usecka::zadejUsecka_bodzacatek(Bod zacatek)
{
zacatek=zacatek;
};
void Usecka::zadejUsecka_bodkonec(Bod konec)
{
konec=konec;
};
void Usecka::zadejUsecka_intdelka(int delka)
{
delka=delka;
};


int main()
{
std::cout<<"Zacatek programu"; //zacatek
std::cout<< std::endl;
std::cout<< std::endl;
////program
Bod prvni(0,0,0); //tvorba promennych
Bod druhy(0,0,0);
Usecka cara();
int zacatekX;
int zacatekY;
int zacatekZ;
int konecX;
int konecY;
int konecZ;
int delka;
int a;
std::cout<<"Zadejte prosim souradnici X prvniho bodu: "; //zadavani promennych
std::cin>> zacatekX;
std::cout<< "Zadejte prosim souradnice Y prvniho bodu: ";
std::cin>> zacatekY;
std::cout<< "A ted prosim zadejte souradnici Z prvniho bodu: ";
std::cin>> zacatekZ;
std::cout<< "Nyni bych Vas poprosil abyste zadali souradnici X druheho bodu: ";
std::cin>> konecX;
std::cout<< "Nyni prosim zadejte souradnici Y druheho bodu: ";
std::cin>> konecY;
std::cout<< "A naposledy prosim zadejte souradnici Z druheho bodu: ";
std::cin>> konecZ;
prvni.zadejBod_poziceX(zacatekX); //dosazeni bodu
prvni.zadejBod_poziceY(zacatekY);
prvni.zadejBod_poziceZ(zacatekZ);
druhy.zadejBod_poziceX(konecX);
druhy.zadejBod_poziceY(konecY);
druhy.zadejBod_poziceZ(konecZ);
cara().zadejUsecka_bodzacatek(prvni);
cara().zadejUsecka_bodkonec(druhy);
cara().zadejUsecka_intdelka(10);
a=cara().ziskejUsecka_intdelka();
std::cout<< a;
std::cout<< std::endl; //konec
std::cout<< std::endl;
std::cout<< "Toto je konec programu";
std::cin.get();
std::cin.get();
return 0;
}

Nahlásit jako SPAM
IP: 88.102.44.–
sputnikone+1
Věrný člen
1. 2. 2011   #2
-
0
-

To Kowalsky : Jméno proměnné je cara a ne cara(). Závorky se používají pouze v deklaraci proměnné, kvůli volání konstruktoru...

Nahlásit jako SPAM
IP: 147.251.201.–
Kowalsky
~ Anonymní uživatel
13 příspěvků
1. 2. 2011   #3
-
0
-

Právě že když tam ty závorky nedám tak mi to nahlásí ten "no matching function for call to Usecka...."
a kdyz je tam dam tak to nahlasi "Linker error undefined references to cara()"

Nahlásit jako SPAM
IP: 88.102.44.–
sputnikone+1
Věrný člen
1. 2. 2011   #4
-
0
-

To Kowalsky : Takže takhle:

#include<iostream>


class Bod
{
public:
Bod(int poziceX, int poziceY, int poziceZ);
~Bod();
private:
int poziceX;
int poziceY;
int poziceZ;
public:
int ziskejBod_poziceX() const;
int ziskejBod_poziceY() const;
int ziskejBod_poziceZ() const;
void zadejBod_poziceX(int a);
void zadejBod_poziceY(int a);
void zadejBod_poziceZ(int a);
};


//konstruktor a destruktor
Bod::Bod(int poziceX, int poziceY, int poziceZ)
{
poziceX=poziceX;
poziceY=poziceY;
poziceZ=poziceZ;
};
Bod::~Bod()
{};



int Bod::ziskejBod_poziceX()const
{
return poziceX;
};
int Bod::ziskejBod_poziceY()const
{
return poziceY;
};
int Bod::ziskejBod_poziceZ()const
{
return poziceZ;
};


void Bod::zadejBod_poziceX(int a)
{
poziceX=a;
};
void Bod::zadejBod_poziceY(int a)
{
poziceY=a;
};
void Bod::zadejBod_poziceZ(int a)
{
poziceZ=a;
};


class Usecka
{
private:
Bod zacatek;
Bod konec;
int delka;
public:
Usecka(): zacatek(0,0,0), konec(0,0,0){}
Bod ziskejUsecka_bodzacatek() const;
Bod ziskejUsecka_bodkonec() const;
int ziskejUsecka_intdelka() const;
void zadejUsecka_bodzacatek(Bod zacatek);
void zadejUsecka_bodkonec(Bod konec);
void zadejUsecka_intdelka(int delka);
};



Bod Usecka::ziskejUsecka_bodzacatek()const
{
return zacatek;
};
Bod Usecka::ziskejUsecka_bodkonec()const
{
return konec;
};
int Usecka::ziskejUsecka_intdelka()const
{
return delka;
};
void Usecka::zadejUsecka_bodzacatek(Bod zacatek)
{
zacatek=zacatek;
};
void Usecka::zadejUsecka_bodkonec(Bod konec)
{
konec=konec;
};
void Usecka::zadejUsecka_intdelka(int delka)
{
delka=delka;
};


int main()
{
std::cout<<"Zacatek programu"; //zacatek
std::cout<< std::endl;
std::cout<< std::endl;
////program
Bod prvni(0,0,0); //tvorba promennych
Bod druhy(0,0,0);
Usecka cara;
int zacatekX;
int zacatekY;
int zacatekZ;
int konecX;
int konecY;
int konecZ;
int delka;
int a;
std::cout<<"Zadejte prosim souradnici X prvniho bodu: "; //zadavani promennych
std::cin>> zacatekX;
std::cout<< "Zadejte prosim souradnice Y prvniho bodu: ";
std::cin>> zacatekY;
std::cout<< "A ted prosim zadejte souradnici Z prvniho bodu: ";
std::cin>> zacatekZ;
std::cout<< "Nyni bych Vas poprosil abyste zadali souradnici X druheho bodu: ";
std::cin>> konecX;
std::cout<< "Nyni prosim zadejte souradnici Y druheho bodu: ";
std::cin>> konecY;
std::cout<< "A naposledy prosim zadejte souradnici Z druheho bodu: ";
std::cin>> konecZ;
prvni.zadejBod_poziceX(zacatekX); //dosazeni bodu
prvni.zadejBod_poziceY(zacatekY);
prvni.zadejBod_poziceZ(zacatekZ);
druhy.zadejBod_poziceX(konecX);
druhy.zadejBod_poziceY(konecY);
druhy.zadejBod_poziceZ(konecZ);
cara.zadejUsecka_bodzacatek(prvni);
cara.zadejUsecka_bodkonec(druhy);
cara.zadejUsecka_intdelka(10);
a=cara.ziskejUsecka_intdelka();
std::cout<< a;
std::cout<< std::endl; //konec
std::cout<< std::endl;
std::cout<< "Toto je konec programu";
std::cin.get();
std::cin.get();
return 0;
}

Nahlásit jako SPAM
IP: 147.251.201.–
Kowalsky
~ Anonymní uživatel
13 příspěvků
1. 2. 2011   #5
-
0
-

To sputnikone : JJ tak....hazi mi to chybu na řadku114
:"no matching function for call to Usecka...."

Nahlásit jako SPAM
IP: 88.102.44.–
Kowalsky
~ Anonymní uživatel
13 příspěvků
1. 2. 2011   #6
-
0
-

A tvuj kod mi jede :-(..cos tam jeste opravil protoze me to bez tech zavorek nejelo :-/

Nahlásit jako SPAM
IP: 88.102.44.–
sputnikone+1
Věrný člen
1. 2. 2011   #7
-
0
-

To Kowalsky : Řádek 69 a 114 :smile1:

Nahlásit jako SPAM
IP: 147.251.201.–
Grungy0
Super člen
2. 2. 2011   #8
-
0
-

Tvoj problém bol s konštruktorom. V c++ ide o to že keď vytváraš inštanciu nejakého objektu(vid v triede usecka, bod zacatek a koniec) zavolá sa konštruktor (v tomto prípade triedy bod). Ty si pre túto triedu definoval konštruktor s 3 tromi parametrami Bod::Bod(int poziceX, int poziceY, int poziceZ) to znamená že všade kde chceš vytvoriť inštanciu triedy bod musíš dať kompilátoru vedieť, že chceš tento objekt vytvoriť na základe tohoto konštruktora, preto je na riadku 69 zavolané zacatek(0,0,0). Výhodou c++ je to že ty tých konštruktorov môžeš mať definovaných viac (samozrejme že s inými parametrami). Velký pozor si ale musíš dať na skryté volania konštruktora. To znamená, že ak nedefinuješ žiadny konštruktor kompilátor si vygeneruje vlastný, v tvojom prípade Bod:Bod(). To znamená, že ti stačí deklarovať premennú napr. Bod zacatek a o nič sa nemusíš viac starať.Musíš však rátať s tým, že premenné v triede budú mať náhodné hodnoty. Preto sa to rieši tak, že si tento konštruktor napíšeš sám a dáš tam hodnoty ktoré potrebuješ, v tvojom prípade takto:

Bod::Bod() {poziceX=0; poziceY=0; poziceZ=0}
.
Doporučujem ti naštudovať si o konštruktoroch viac ak chceš vnárať objekty jeden do druhého.

Nahlásit jako SPAM
IP: 158.193.84.–
Prvý náznak hlúposti, je pocit geniality.
kowalsky
~ Anonymní uživatel
13 příspěvků
2. 2. 2011   #9
-
0
-

Mužu prosim ještě poprosit jak by vypadala funkce kdybych chtěl mit ve třídě usečka funkci na zjištění souřadniceX bodu zacatek?
abych mohl zadat pouze funkci v usecce a zjistil bych souradniciX bodu zacatek a nemusel bych tvorit nový Bod a teprve z nej ziskat souradnici.

Nahlásit jako SPAM
IP: 88.102.44.–
crAzY^
~ Moderátor
+10
Grafoman
2. 2. 2011   #10
-
0
-

int Usecka::ziskejSouradniciX() { return (this->zacatek).ziskejBox_poziceX(); }

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 43 hostů

Podobná vlákna

Equality function — založil nord

Function click — založil zelenac1

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý