Nefunguje přetěžování operátorů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nefunguje přetěžování operátorů – C / C++ – Fórum – Programujte.comNefunguje přetěžování operátorů – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
7. 3. 2012   #1
-
0
-

Zdravím,

potřeboval bych pomoct s přetěžováním operátorů.

Nefunguje mi tenhle program, hlasi to nejake chyby:

#include <stdio.h>   
#include <conio.h>   
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include <string.h>

using namespace std; 




class Str
{

private:
	
char *buf;


public:

		

	Str()
	{

		buf =0;
	};


	
	
	Str(const char* s)  
	{                  
		 
	  buf = new char[ strlen( s) + 1]; // ALOKACE 
      strcpy( buf, s); ;
	
	};



	~Str() // DESTRUKTOR
	{
		delete[] buf; // uvolneni alokovaneho pole 

	};
	


	Str& operator =( const Str& s);  

	Str operator+(const Str& s);

	
	
	void vypis(); // FUNKCE
		

};


Str& Str::operator=( const Str&s)  
{

	delete[] buf; // uvolneni pameti

	if  ( s.buf==0 ) 

		buf=0;

	else 
	{

		buf = new char[ strlen(s.buf) +1 ];  // alokace
		
		strcpy(buf, s.buf);
	}



return *this;

}


Str Str::operator + (const Str&s)
{
	
	Str dalsi;

	dalsi.buf= new char [ strlen(buf) + strlen(s.buf)+ 1];

		

	strcpy(dalsi.buf, buf);



	strcat(dalsi.buf, s.buf);

	
	return dalsi;

}



void Str::vypis()
{

	printf("\n%s",buf);
	
}



int main()     
{

	

Str retezec("NECO"); 
                    

Str retezec2;  

Str retezec3("122");




retezec2 = retezec + retezec3;


retezec2.vypis();




getch();
return 0;

}

Nevíte někdo, co s tím?

Nahlásit jako SPAM
IP: 90.181.15.–
Reklama
Reklama
KIIV+42
God of flame
7. 3. 2012   #2
-
0
-

Neexistuje "nejaka" chyba - chyby sou obvykle urcity text popisujici o co kraci

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
7. 3. 2012   #3
-
0
-

No ono hlasi ERROR  "  1>retezce.obj : error LNK2019: unresolved external symbol "public: __thiscall Str::Str(class Str const &)" (??0Str@@QAE@ABV0@@Z) referenced in function "public: class Str __thiscall Str::operator+(class Str const &)" (??HStr@@QAE?AV0@ABV0@@Z)
"

Nahlásit jako SPAM
IP: 90.181.15.–
7. 3. 2012   #4
-
0
-

A používám to ve Visual C++ 2010 Express.

Nahlásit jako SPAM
IP: 90.181.15.–
KIIV+42
God of flame
7. 3. 2012   #5
-
0
-

co ja zajimave me to v g++ jde

(samozrejme kdyz sem se zbavil kravin jako conio.h... )

+ bys mel aspon kontrolovat jestli se neuvolnuje NULL pointer

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV+42
God of flame
7. 3. 2012   #6
-
0
-

mam pocit ze se to snazi o copy-constructor a ne pretizeni =

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
7. 3. 2012   #7
-
0
-

Hlavně mě nefunguje tohle:

Str Str::operator + (const Str&s)
{
	
	Str dalsi;

	dalsi.buf= new char [ strlen(buf) + strlen(s.buf)+ 1];

		

	strcpy(dalsi.buf, buf);



	strcat(dalsi.buf, s.buf);

	
	return dalsi;
}

Kdyz tuhle část zakomentuju, program fachá.

Tam bude asi problém s tou deklarací objektu dalsi .

Nechce to fungovat.

Nahlásit jako SPAM
IP: 90.181.15.–
7. 3. 2012   #8
-
0
-

Tohle s tim taky souvisí:

retezec2 = retezec + retezec3;
Nahlásit jako SPAM
IP: 90.181.15.–
KIIV+42
God of flame
7. 3. 2012   #9
-
0
-

mozna zkusit    Str & Str::operator + (const Str&s)   (a doufat ze se po skonceni te funkce nevola destruktor :D)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
7. 3. 2012   #10
-
0
-

Chybí tam ten copy constructor. Vzhledem k tomu, že třída obsahuje ukazatel na data, tak je to dost fatální chyba. Dále je špatně operátor přiřazení (i když v daném příkladě se to asi neprojeví). Zkus se zamyslet, co se v tom operátoru stane, když zavoláš

Str a;

a = a;
Nahlásit jako SPAM
IP: 194.138.12.–
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, 111 hostů

Podobná vlákna

Pretezovani staticke metody — založil Jenda

Nastavení operátoru != — založil TomBar

Moderátoři diskuze

 

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