Új hozzászólás Aktív témák
-
[sultan]
tag
végülis az egesz program a main-ben van
-
[sultan]
tag
main()
-
[sultan]
tag
ha adnék egy linket a forrasfajlról meg tudnád nézni mi a gond?
-
[sultan]
tag
-
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
-
[sultan]
tag
nincs valami otleted?
-
[sultan]
tag
szoval van ez a program [link]
es ugy szeretném megcsinalni, hogy 1 fajlbol olvassa ki a dolgokat, csak nemnagyon megy -
ktg3
őstag
vki pls help me
mindjárt leverem a gépet az asztalról mert nem megy és 1szerűen nem tudom h hol a hiba
//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;
} -
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
-
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
megoldást püben várok
[Szerkesztve] -
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
-
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
-
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?"
-
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?"
-
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
-
norbiphu
senior tag
Num& Num:perator+(const Num& b){
Num tmp(0,''0'',0);
tmp.SetEgesz(3);
tmp.SetTort(''000'');
return tmp;
}
Num& Num:perator=(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?"
-
bpx
őstag
letöltésnél csak a ''this file is hosted by dynamicweb, stb...''-s gif jön be
-
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
szerk:
wow micsoda fejlemények: A + B = C - vel működik
[Szerkesztve]"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"
-
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 >>
-
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 -
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:stream& 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:perator[](unsigned int pos)
{
return pData[pos];
}
// Konstans objektumokat is le szeretnénk kérdezni
const char& String:perator[](unsigned int pos)const
{
return pData[pos];
}
// Összefuz két Stringet
String String:perator+(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:perator+=(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:perator=(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:perator==(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:perator!=(const String& theOther)const
{
if(theOther==*this)
return false;
else return true;
}
// Visszaad egy csak olvasható hozzáférést a stringhez
String:perator 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 -
bpx
őstag
ezt még fordítani sem tudom, egyszerűbb ha felteszed a forrásfájlt vhova
(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
pData[elementsNum]='\0';
}
[Szerkesztve] -
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?"
-
Lortech
addikt
válasz FehérHolló #94 üzenetére
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
-
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.
-
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?"
-
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- sziku69: Fűzzük össze a szavakat :)
- Mibe tegyem a megtakarításaimat?
- Mr. Y: Curve kártyával vigyázz tankolásnál!
- VR topik (Oculus Rift, stb.)
- A fociról könnyedén, egy baráti társaságban
- A Microsoft feltalálta az olcsó AI-t
- Építő/felújító topik
- XPEnology
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Hobby elektronika
- További aktív témák...