Hirdetés

2024. június 2., vasárnap

Gyorskeresés

Hozzászólások

(#51) Jester01 válasza [sultan] (#50) üzenetére


Jester01
veterán

Na ez már jobb :)
Van main függvényed? :F

Jester

(#52) [sultan]


[sultan]
tag

végülis az egesz program a main-ben van

(#53) zfarkas válasza [sultan] (#52) üzenetére


zfarkas
senior tag

Van olyan sor a programodban, hogy:
int main(int argc, char **argv)
?


[Szerkesztve]

Raw Dark Pure

(#54) [sultan]


[sultan]
tag

main()

(#55) [sultan]


[sultan]
tag

ha adnék egy linket a forrasfajlról meg tudnád nézni mi a gond?:U

(#56) Jester01 válasza [sultan] (#55) üzenetére


Jester01
veterán

Egyből meg is tehetted volna ;)

Jester

(#57) [sultan]


[sultan]
tag

(#58) Jester01 válasza [sultan] (#57) üzenetére


Jester01
veterán

Nekem fordul, igaz néhány warning az van:

$ gcc -Wall huffman2.c
huffman2.c:28: warning: return type defaults to ‘int’
huffman2.c: In function ‘main’:
huffman2.c:37: warning: unused variable ‘freq’
huffman2.c:35: warning: unused variable ‘betu’
huffman2.c:32: warning: unused variable ‘total’
huffman2.c:31: warning: unused variable ‘head’
huffman2.c:104: warning: control reaches end of non-void function
/tmp/cc4T5VqL.o: In function `main':
huffman2.c:(.text+0x104): warning: the `gets' function is dangerous and should not be used.

Működni éppenséggel nem működik.

Ez mondjuk C nem pedig C++.

Jester

(#59) [sultan]


[sultan]
tag

nincs valami otleted? :F

(#60) Jester01 válasza [sultan] (#59) üzenetére


Jester01
veterán

Mire? Fordításra? Ott van, hogy én hogy csináltam. De te még mindig nem írtad ide, hogy neked hogyan sikerült a hibát előidézni.

Jester

(#61) [sultan]


[sultan]
tag

szoval van ez a program [link]
es ugy szeretném megcsinalni, hogy 1 fajlbol olvassa ki a dolgokat, csak nemnagyon megy

(#62) ktg3


ktg3
őstag

vki pls help me :U
mindjárt leverem a gépet az asztalról mert nem megy és 1szerűen nem tudom h hol a hiba :O

//main

#include ''fifo.h''
#include <stdio.h>



void main ()
{
int array[]={0,1,2,3,4,5,6,7,8,9};

fifo m;
for(int i=0;i=9;i++)
m.push(array);

printf (''%d\n'', m.pop());


}


//fifo.h

#ifndef FIFO_H
#define FIFO_H


class fifo
{
int *t,elementnum;


public:

fifo () {t=0,elementnum=0;}
void push (int n);
int pop ();
~fifo (){delete []t;}

};


#endif

//fifo fgvk

#include <stdio.h>
#include ''fifo.h''


void fifo::push (int n)
{
int *tmp,i;
tmp=new int [elementnum+1];
for (i=0;i<elementnum;i++)
tmp
=t;
tmp[elementnum-1]=n;
delete []t;
elementnum++;
t=tmp;

}


fifo::pop ()
{
int *tmp,i,x;
tmp=new int [elementnum-1];
for (i=0;i<elementnum-1;i++)
tmp
=t;
x=t[elementnum];
delete []t;
elementnum--;
t=tmp;
return x;
}

(#63) Jester01 válasza ktg3 (#62) üzenetére


Jester01
veterán

// main
void main ()
... helyett ...
int main (int, char**)
(és persze return 0; a végére)

for(int i=0;i=9;i++)
... helyett ...
for(int i=0;i<=9;i++)

// fifo.cpp
tmp[elementnum-1]=n;
... helyett ...
tmp[elementnum]=n;

fifo::pop ()
... helyett ...
int fifo::pop ()

x=t[elementnum];
... helyett ...
x=t[elementnum - 1];

Jester

(#64) ktg3 válasza Jester01 (#63) üzenetére


ktg3
őstag

bigthx :R

(#65) ktg3


ktg3
őstag

sziasztok

aki nekem megmondja h mi a hiba leírja és el is magyarázza annak 1-2 heineken jár bp-n!
itt a link ahol van a progi:[link]

üdv:ktg

mod:ja és persze csak az 1. segítőnek jár sör :U
megoldást püben várok :R

[Szerkesztve]

(#66) Jester01 válasza ktg3 (#65) üzenetére


Jester01
veterán

Rengeteg baj van vele, sört nem szeretem és azt se ha valaki több topikba is beírja ugyanazt.

Mindenesetre az elsõ 2 probléma (futásidei sorrendben)
1) v1.erase(12) miatt exception lesz hiszen csak 10 elem van a vektorban (szerintem tévedésbõl felcserélted a 2 sort)
2) az Exception osztályodnak nincs copy constructora, emiatt (és mert nem dinamikus példányt hozol létre) a message kétszer lesz felszabadítva.

Jester

(#67) ktg3 válasza Jester01 (#66) üzenetére


ktg3
őstag

az direkt volt 12
azzal akartam tesztelni az exceptionst..
de ezt nem értem..
mi az h nincs copy konstruktora amikor ottvan ..
más is ezt mondta de nem értem.
mit kell változtatni h jó legyen?

(#68) Jester01 válasza ktg3 (#67) üzenetére


Jester01
veterán

Az Exception osztálynak nincs olyan konstruktora, ami egy másik Exception-t fogad paraméternek. A copy constructor szignatúrája így néz ki:
Exception(const Exception& source)

MOD: ha te nem csinálsz ilyet akkor a fordító generál egyet. De az tagonkénti értékadás lesz így aztán több példány is ugyanazt a message tagot fogja használni és mindegyik fel akarja szabadítani. Le kell másolni.

[Szerkesztve]

Jester

(#69) norbiphu


norbiphu
senior tag

üdv!

kéne egy kis help nem értem mi a hiba... (csak az idevágó kódrészeket emelem ki)


header:
class Num{
int egesz;
char* tort;
long exp;
public:
Num Add(Num X, Num Y);

fgv (maga a művelet még nincs megírva)
Num Num::Add(Num X, Num Y) {
Num Result(0,''0'',0);
return Result;
}


így hívom meg:
Num::Add(A,B);

és ezt a hibát kapom:
1>j:\documents and settings\palotai norbert\dokumentumok\visual studio 2005\projects\nagyhazi\nagyhazi\main.cpp(9) : error C2352: 'Num::Add' : illegal call of non-static member function
1> j:\documents and settings\palotai norbert\dokumentumok\visual studio 2005\projects\nagyhazi\nagyhazi\num.h(19) : see declaration of 'Num::Add'


de miért?

ha ezt az összeget értékül adom egy C típusú Numnak akkor az így néz ki C=Num::Add(A,B); ehhez ugye, nem kell operator=, csak copy konstruktor?


[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#70) norbiphu válasza norbiphu (#69) üzenetére


norbiphu
senior tag

itt a teljes forrás, ahogy áll most:
[link]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#71) norbiphu válasza norbiphu (#69) üzenetére


norbiphu
senior tag

á már leesett! csak valamelyik példány metódusaként kellett hívni :)

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#72) norbiphu


norbiphu
senior tag

újabb kérdés:
[link]

C = A + B;
operator+ meghívódik, amik benne vannak le is futnak, de amikor a return tmp; - hez ér elszáll, és fogalmam sincs, hogy miért. szintaktialig elvileg ok.

előre is köszi a helpet!

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#73) bpx válasza norbiphu (#72) üzenetére


bpx
őstag

C=A+B hez már operator= kell

(#74) Lortech válasza bpx (#73) üzenetére


Lortech
addikt

Szerintem nem kell, mivel ha megnézed a + operátor meg van írva (és num-ot ad vissza).

Screammm: Nekem egyébként lefut a program. (DEV C++) PrintNumot megírva azt dobta amit beleégettél a +-ba. Bár nem nagyon néztem meg, mert lefutott. Megj: () konstruktort írtál hozzá, ami alapból 0,''0'',0, akkor meg felesleges num peldany(0,''0'',0)-lal példányosítani.

Thank you to god for making me an atheist

(#75) norbiphu válasza Lortech (#74) üzenetére


norbiphu
senior tag

megírtam operator= - t és most már működik!

a felesleges dolgokat javítom, köszi, hogy szóltál, csak ma egyelőre egy vázat akartam neki összerakni :)

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#76) Lortech válasza norbiphu (#75) üzenetére


Lortech
addikt

Akkor lehet igaza volt a kollégának, és csak szerencse kérdése hogy nálam így is működik. Melózok úgyhogy nem nézek bele megint.

Thank you to god for making me an atheist

(#77) norbiphu


norbiphu
senior tag

Num& Num::operator+(const Num& b){
Num tmp(0,''0'',0);
tmp.SetEgesz(3);
tmp.SetTort(''000'');
return tmp;
}

Num& Num::operator=(const Num& b){
this->egesz=b.egesz;
this->tort=b.tort;
this->exp=b.exp;
return *this;
}


A = B kódra lefut, A megkapja B értékeit..

C = A + B -re lefut az operator+ visszadja tmp-t, de operator= nem kapja meg valamiért :(
szerk: operator= fejléc még megkapja a tmp értékeit, de amikor belép a műveleti részbe, b értékei 0, bad ptr, 0 lesz. miért felejti el?

[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#78) bpx válasza norbiphu (#77) üzenetére


bpx
őstag

tegnap mikor megnéztem a kódodat, a VS2005 warningot dobott az operator+-ra, mert lokális változóra (tmp) mutató referenciát adsz vissza, lehet az lesz a baja de ez csak tipp :)))

(#80) bpx


bpx
őstag

letöltésnél csak a ''this file is hosted by dynamicweb, stb...''-s gif jön be :(

(#84) norbiphu válasza bpx (#78) üzenetére


norbiphu
senior tag

és nem tudja értelmezni, azt hogy C = A + B ?
operator+ - nál muszáj valami helyi dolgot visszaadnom ami az eredményt tárolja. operator+ meg operator= nem akar együttműködni vagy mi lehet a gáz? lövésem sincsen...
operator=

mi a tökömnek kell operator overload jobb lenne nekem egy Add fgv :D
szerk:
wow micsoda fejlemények: A + B = C - vel működik :D

[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#85) norbiphu válasza norbiphu (#84) üzenetére


norbiphu
senior tag

idő lejárt: a kód így már lefut, de értelemszerűen nem úgy működik ahogy kellene, mert az összeg csak simán felveszi C értékét :((

[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#86) norbiphu válasza bpx (#78) üzenetére


norbiphu
senior tag

ja valóban igazad volt, értéket kell visszaadni nem pedig referenciát és így már jó is :R

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#87) Retekegér


Retekegér
HARDVERAPRÓD

Vki elmagyarázná nekem konyhanyelven, hogy az adatbevitelt sztringbe elvégezni mit jelent és mi az előnye a sscanf+fflush függvények meghívásával szemben?

<< Heimdal >>

(#88) bpx válasza norbiphu (#84) üzenetére


bpx
őstag

operator+ - nál muszáj valami helyi dolgot visszaadnom ami az eredményt tárolja
ha egy helyi pl. tmp változót létrehozol, és abba teszed az eredményt, akkor azt ne referenciaként add vissza, mert a fv lefutása után a lokális változó megszűnik

referenciaként pl. this-t vagy az egyik kapott opreandust tudod visszaadni

(#89) bpx válasza Retekegér (#87) üzenetére


bpx
őstag

c++ ban van string típus, nem kell pointerezni, nem kell format-stringezni

(#90) ktg3


ktg3
őstag

vki segítesen legyen szíves!!!

combos kis hsz lesz...
szokásszerint megint nem tudom h hol a hiba
biztos lesz benne egy rahedli..

amig nem írtam meg az utólsó 4 fgv-t addig működött jól..
szal ott keresendő a hiba!

köszönöm!

//string.h


#ifndef STRING_H
#define STRING_H
#include <iostream>
namespace TheUltimateString
{
class String
{
// A karakterek aktuális száma:
unsigned int elementsNum;

// A karaktereket tartalmazó memóriaterületre mutató pointer:
char*pData;
public:
// Argumentum nélküli konstruktor:
String();

// Másoló konstruktor:
String(const String&string);

// Egy NULL végu sztringet váró konverziós konstruktor
// Ez felel a char*-> String konverzióért
String(const char* str);

// Egy karaktert és egy elojel nélküli egészet (times) váró konstruktor,
// amely times darab c karakterrel inicializálja a stringet:
String(char c, unsigned int times);

// A destruktor:
~String(){delete[]pData;}

// Visszatér a sztring hosszával
unsigned int getLength()const{return elementsNum;}

// Kiírja a sztringet a megadott kimeneti adatfolyamba (a 'cout' ostream típusú):
void print(std::ostream& os);

// Visszaadja a megadott pozícióban lévo karaktert, egyébként nullát:
char& operator[](unsigned int pos);
// Konstans objektumokat is le szeretnénk kérdezni
const char& operator[](unsigned int pos)const;

// Összefuz két Stringet
String operator+(const String& theOther)const;
const String& operator+=(const String &theOther);
const String& operator=(const String& theOther);
bool operator==(const String& theOther)const;
bool operator!=(const String& theOther)const;


// Visszaad egy csak olvasható hozzáférést a stringhez
operator const char*()const;

// --- Statikus függvények. Ezek két stringen végeznek muveletet. ---

// Összefuz két sztringet, és visszatér vele:
static String concatenate(const String& string1, const String& string2);

// Összehasonlít két sztringet:
static bool compare(const String& string1, const String& string2);

// A második sztringet az elso sztringbe másolja:
static void copy(String& string1, const String &string2);

unsigned int strlen(const String& s);

int strchr(const String& s,char c);

bool strcmp(const String& s1,const String& s2);

char* strstr(const String& s1,const String& s2);
};
}
#endif /* STRING_H */





//string.cpp


#include ''String.h''
using namespace std;
using namespace TheUltimateString;
// Argumentum nélküli konstruktor:
String::String()
{
elementsNum=0;
pData=new char[1];
pData[0]='\0';
}
// Másoló konstruktor:
String::String(const String& string)
{
*this=string;
}
// Egy NULL végu sztringet váró konverziós konstruktor
// Ez felel a char*-> String konverzióért
String::String(const char* str)
{
elementsNum=strlen(str);
pData=new char[strlen(str)+1];
for(unsigned int i=0;i<strlen(str)+1;i++)
pData=str;

}
// Egy karaktert és egy elojel nélküli egészet (times) váró konstruktor,
// amely times darab c karakterrel inicializálja a stringet:
String::String(char c, unsigned int times)
{
elementsNum=times;
pData=new char[elementsNum+1];
for(unsigned int i=0;i<elementsNum;i++)
pData=c;
pData[elementsNum]='\0';
}
// Kiírja a sztringet a megadott kimeneti adatfolyamba (a 'cout' ostream típusú):
void String::print(ostream& os)
{
os<<pData<<endl;
}
// Visszaadja a megadott pozícióban lévo karaktert, egyébként nullát:
char& String::operator[](unsigned int pos)
{
return pData[pos];
}
// Konstans objektumokat is le szeretnénk kérdezni
const char& String::operator[](unsigned int pos)const
{
return pData[pos];
}
// Összefuz két Stringet
String String::operator+(const String& theOther)const
{
String s;
s.pData=new char[elementsNum+theOther.elementsNum+1];
for(unsigned int i=0;i<elementsNum;i++)
s.pData
=pData;
for(i=0;i<theOther.elementsNum;i++)
s.pData[i+elementsNum]=theOther.pData
;
s.elementsNum=elementsNum+theOther.elementsNum;
s.pData[s.elementsNum]='\0';
return s;
}
const String& String::operator+=(const String &theOther)
{
char* tmp=new char[elementsNum+theOther.elementsNum+1];
for(unsigned int i=0;i<elementsNum;i++)
tmp=pData;
for(i=0;i<theOther.elementsNum;i++)
tmp[i+elementsNum]=theOther.pData;
this->elementsNum+=theOther.elementsNum;
tmp[elementsNum]='\0';
delete[]pData;
this->pData=tmp;
return *this;
}
const String& String::operator=(const String& theOther)
{
elementsNum=theOther.elementsNum;
pData=new char[theOther.elementsNum+1];
for(int i=0;i<theOther.elementsNum;i++)
pData
=theOther.pData;
pData[elementsNum]='\0';
return *this;
}
bool String::operator==(const String& theOther)const
{
if(elementsNum!=theOther.elementsNum)
return false;
else
{
int not=0;
for(int i=0;i<elementsNum;i++)
{
if(pData
!=theOther.pData)
{not=1; break;}
}
if(not) return false;
else return true;
}
}
bool String::operator!=(const String& theOther)const
{
if(theOther==*this)
return false;
else return true;
}
// Visszaad egy csak olvasható hozzáférést a stringhez
String::operator const char*()const
{
return pData;
}
// --- Statikus függvények. Ezek két stringen végeznek muveletet. ---
// Összefuz két sztringet, és visszatér vele:
String String::concatenate(const String& string1, const String& string2)
{
String s;
s.elementsNum=string1.elementsNum+string2.elementsNum;
s.pData=new char[s.elementsNum+1];
for(int i=0;i<string1.elementsNum;i++)
s.pData
=string1.pData;
for(i=0;i<string2.elementsNum;i++)
s.pData[string1.elementsNum+i]=string2.pData
;
return s;
}
// Összehasonlít két sztringet:
bool String::compare(const String& string1, const String& string2)
{
if(string1.elementsNum!=string2.elementsNum)
return false;
else
{
int not=0;
for(int i=0;i<string1.elementsNum;i++)
{
if(string1.pData!=string2.pData)
{not=1; break;}
}
if(not) return false;
else return true;
}
}
// A második sztringet az elso sztringbe másolja:
void String::copy(String& string1, const String &string2)
{
string1.elementsNum=string2.elementsNum;
string1.pData=new char[string2.elementsNum+1];
for(int i=0;i<string2.elementsNum+1;i++)
string1.pData=string1.pData;
}

unsigned int String::strlen(const String& s)
{
return s.elementsNum;
}
int String::strchr(const String& s,char c)
{
for (int i=0;i<s.elementsNum;i++)
if (s.pData==c)
return i+1;
}
bool String::strcmp(const String& s1,const String& s2)
{
if (s1.elementsNum==s2.elementsNum)
for (int i=0;i<s1.elementsNum;i++)
{
if (s1.pData
!=s2.pData)
return false;
if (i==s1.elementsNum-1)
return true;
}
else return false;
}
char* String::strstr(const String& s1,const String& s2)
{
char* s=''nincs benne/0'';
char* string2=new char [s2.elementsNum+1];
for (int i=0;i<s2.elementsNum;i++)
string2
=s2.pData;
string2[s2.elementsNum]='/0';


for (i=0;s1.elementsNum;i++)
{
if (s1.pData
==s2.pData[0])
{
for (int j=0;j<s2.elementsNum;j++)
{
if (s1.pData[j]!=s2.pData[j])
return s;
if (j==s2.elementsNum-1)
return string2;
}
}
}
}



//theultimatesample.cpp


#include <iostream>
#include ''String.h''

using namespace std;
using namespace TheUltimateString;


int main()
{
String str1=''Hello Moneypenny.'';
printf(str1);
str1=''My name is Bond. '';
str1+=''James Bond.'';
printf(''\n%s\n'',(const char*)str1);

if(str1==(String)''My name is Bond. James Bond.''
&&!(str1!=(String)''My name is Bond. James Bond.''))
{
cout<<''Oh, Mr. Bond!''<<endl;
}

return 0;
}


belefért :U

(#91) bpx válasza ktg3 (#90) üzenetére


bpx
őstag

ezt még fordítani sem tudom, egyszerűbb ha felteszed a forrásfájlt vhova :D
(smile-kat + stringkonstansokat még visszairogattam, de így is elég sok errort dob, pl. char*-nak adsz chart értékül, vagy char*-ot hasonlítasz össze char-ral)

vagy pl. egy helyen így inicializál stringet:

String::String(char c, unsigned int times)
{
elementsNum=times;
pData=new char[elementsNum+1];
for(unsigned int i=0;i<elementsNum;i++)
pData=c; // pData az char* típusú
// esetleg pData = c; a fenti helyett :D
pData[elementsNum]='\0';
}


[Szerkesztve]

(#92) bpx válasza bpx (#91) üzenetére


bpx
őstag

no mire beírtam már nem tudom újból szerkeszteni, de úgy tűnik a szögletes zárójeleket lenyeli, mert pData [ i ] -t írtam :) szal mindenképp töltsd fel vhova

(#93) norbiphu


norbiphu
senior tag

class Num{
int egesz;
char* tort;
unsigned long long exp;


ez lenni adatstruktúra, ennek a destruktorát így kell megírni elvileg:
Num::~Num(){
delete tort;
};


csak mert ha írok destruktort elszáll a progim :)

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#94) FehérHolló válasza norbiphu (#93) üzenetére


FehérHolló
veterán

delete [] tort;

Másrészt a függvény definíció után nem kell pontosvessző, bár nem zavarja a kutyát sem.

[Szerkesztve]

Skynet is real. It's called Google.

(#95) Lortech válasza FehérHolló (#94) üzenetére


Lortech
addikt

Ha ez lenne a megoldás, a sima delete miért okozna hibát ezzel szemben? Meg még az sem biztos, hogy tömböt akar.

Szerintem nem foglalt le helyet a tortnek, és azért dob neki hibát a delete miatt.

Thank you to god for making me an atheist

(#96) FehérHolló válasza Lortech (#95) üzenetére


FehérHolló
veterán

Ha Visual Studioban programozik (amiben elvileg kötelező lenne BME-s létére - a világ legnagyobb baromsága), akkor emlékeim szerint fordítási hibát kap, de figyelmeztetést biztosan.
Nem ártana egy pontos hibaüzenet.

Szerk: Neked van igazad, ''elszáll a progim'' - tehát futási idejű hiba (=lefordul). :)

Szerk 2: Tömbös megoldás a javallott a feladatához, onnét gondolom, hogy tömb kell neki.

[Szerkesztve]

Skynet is real. It's called Google.

(#97) norbiphu válasza Lortech (#95) üzenetére


norbiphu
senior tag

delete[]-vel sem megy

memóriát pedig a konstruktor foglal neki még az elején:
tort=new char[strlen(t)+1];

szerk:

Program ...
HEAP CORRUPTION DETECTED: after Normal block (#134) at 0x001A3A20.
CRT detected that the application wrote to memory after end of heap buffer.

[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#98) FehérHolló válasza norbiphu (#97) üzenetére


FehérHolló
veterán

Milyen hibaüzenettel száll el?

Skynet is real. It's called Google.

(#99) norbiphu válasza norbiphu (#97) üzenetére


norbiphu
senior tag

egyébként nagyon sok helyen szabadítok fel memót char*-ok után szimplán delete - vel és sehol sem jelez hibát :U

szerk:
okok, de arra nincs ötleted destruktornál miért hal meg?

[Szerkesztve]

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#100) FehérHolló válasza norbiphu (#99) üzenetére


FehérHolló
veterán

Amíg nem telik meg a memória, addig nem is fog (ezek szerint Vis Studio sem). Viszont elég erősen folyik a szegény, ha nem zárójeles delete-tel szabadítasz fel tömböt.

Skynet is real. It's called Google.

Copyright © 2000-2024 PROHARDVER Informatikai Kft.