- Mobil flották
- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy A56 - megbízható középszerűség
- Motorola Edge 50 Fusion - jó fogás
- Mindenki Z Fold7-et akar
- Yettel topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- iPhone topik
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Samsung Galaxy Watch7 - kötelező kör
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Aktív témák
-
czappa
aktív tag
Most van időm c, c++t tanulni. El is kezdtem, az első lépés egy egyszerű kliens-server alkalmazás lenne.
Miután megvan a socket foglalás és a bind a szerver oldalon, akkor egy végtelen ciklussal az accept-el várnám a klienseket.
A lényeg, hogy az accept-től visszakapott azonosító egy ún. ClientHandler osztály konstruktorának egyik paramétere. Egy kliensre működik, de nekem majd több klienst kell kezelnem, ezért első lépésben a egy-egy ClientHandler példányt egy set-ben akarok eltárolni.
Az eltárolás még megy, de...
Előbb a kód:server.cpp:
//az összehasonlitas a SET miatt kell, de nekem valójában nem kell a sorrend meghatározása ezért ilyen furcsa a Cmp
class Cmp{
public:
bool operator()(const ClientHandler a, const ClientHandler b)
{
if (&a == &b) return false;
else return true;
}
};
...
cout << "Bind sikeres" << endl;
cout << "Foprogram elott" << endl;
set<ClientHandler, Cmp> clients; //a set
while(1){
listen(foglalat, 1);
meret = sizeof(ugyfel);
//új kliens
uj=accept(foglalat, (struct sockaddr *)&ugyfel, (socklen_t*)&meret);
if (uj<0){
cout << "Accept sikertelen." << endl;
}else{
//az új kliensnek példányosítunk a ClientHandlerből
ch = new ClientHandler(uj, ugyfel);
cout << "Uj kapcsolat... " << endl;
//ezt eltárolom a SET-be
clients.insert(clients.begin(), *ch);
//clients.empty() == true ? cout << "true" : cout<< "false"<<endl;
//ez csak egy példa: törölném a set összes elemét egyesével, de elotte a ClientHandler kiirValamit fv.-ét meghívom
while( !clients.empty() ) {
//ez a hibás sor!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout << "Torol: " << (*clients.begin()).kiirValamit() << endl;
clients.erase( clients.begin() );
}
//kilepeunk a vegtelen ciklusbol 1 kliens csatlakozasa utan
break;
}
}
if (close(foglalat) != 0)
cout << "Close sikertelen." << endl;
//delete ch;
return 0;
...
ClientHandler.cpp:
char* ClientHandler::kiirValamit(){
//cout << "kiir baromsagot" << endl;
return "valami";
}A hiba a "cout << "Torol: " << (*clients.begin()).kiirValamit() << endl;" sorral van:
passing ‘const ClientHandler’ as ‘this’ argument of ‘char* ClientHandler::kiirValamit()’ discards qualifiersA hiba üzenet alapján keresgéltem google-n, elvileg az a gond - ha jól értem -, hogy egy const függvényből egy nem const-ot hívok.
Az igaz, hogy ha "char* ClientHandler::kiirValamit() const{" -ot írok, akkor lefordul, de
1) Nem látom, hogy én ezt milyen const függvényből hívom
2) a kiirValamit még lehetne const, de a valódi alkalmazásban nem ezt a próba fv.-t hívnám meg, és a valódi fv.-nek hozzá kell férjen az osztály adattagjaihoz, hogy módosítsa azokat. (erre a "konstans fv." nem képes)A válaszokat előre is köszönöm!
-
czappa
aktív tag
No megoldódott:
A hivatalos Qt tutorialt csinálom és abban az 5. lecke végének hatására egy saját esemény kezelést írtam (signal-slot modell-ben egy gomblenyomás).
Csak annyi volt a gáz, hogy ehhez már kell a Q_OBJECT makró, míg a beépítettekhez nem, így a példában sem szerepelt.
Utána már csak azzal szívtam egy keveset, hogy a KDevelop dist-clean-je mintha nem szedett volna le minden file-t és így újrafordításnál gondok adódtak. -
czappa
aktív tag
Qt-ban akadtam el.
Előbb a kód:#include <QApplication>
#include <QFont>
#include <QLCDNumber>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QWidget>class MyWidget : public QWidget
{
public slots:
void button1Clicked();
public:
QSlider *slider;
QPushButton *button1;
QPushButton *quit;
QLCDNumber *lcd;
MyWidget(QWidget *parent = 0);
void init();
};
void MyWidget::button1Clicked(){
slider->setValue(50);
}void MyWidget::init(){
quit = new QPushButton(tr("Quit"));
button1 = new QPushButton(tr("Change"));
quit->setFont(QFont("Times", 18, QFont:: Bold));lcd = new QLCDNumber(2);
lcd->setSegmentStyle(QLCDNumber:: Filled);slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 99);
slider->setValue(0);connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(button1, SIGNAL(clicked()), this, SLOT(button1Clicked()));
connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(quit);
layout->addWidget(lcd);
layout->addWidget(slider);
layout->addWidget(button1);
setLayout(layout);
}MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
init();
}int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget *widget = new MyWidget();
widget->show();
return app.exec();
}A probléma, hogy mikor lefordítom - akár manuálisan, akár Kdevelop-ból - ezt írja:
Object::connect: No such slot QWidget::button1Clicked()Így persze hiába nyomogatom azt a gombot, nem csinál semmit. Próbáltam kiokoskodni a Kdevelop-os példából, de elvileg ugyan úgy csinálom és nem jó. (Gyakorlatilag nyilván elnézek valamit...)
Már azt sem értem, hogy miért a QWidget::button1Clicked() keresi, holott ennek a MyWidget-ben kéne lennie.
Előre is köszi. -
czappa
aktív tag
válasz
Metalwarrior #238 üzenetére
A fork()-kal másolja le magát.
Visszatérési érték:
-ha kisebb mint 0, akkor gebasz történt;
-0: a gyermek process
-nagyobb mint 0: szülő.Alapesetben tehát egy if-fel vizsgálod, h 0, vagy több (vagy kevesebb).
Saját processz azonossítója: getpid(),
Szülőé getppid().
Mindkettőhöz az unistd.h kell.Megj: A fork() a gyermek processz id-vel (pid) vissza, Tehát ha az nagyobb nullánál, akkor vagy a szülő folyamatban és ekkor a visszatérési érték a gyermek pid-je.
mod.:
"Ha lehet kis kommentet is hogy mi mit csinál mert ebből zokni vagyok."A zh-t ne írjuk meg helyetted? Nem nagyon akarlak piszkálni, de neked kell döntened, hogy megakarod-e tanulni, vagy sem. Viszont ha a válasz "sem" nem várd el, hogy más csinálja meg helyetted.
-
czappa
aktív tag
Köszi a válasz!
Azt hiszem értem, de hogy biztos legyek benne összefoglalom:
Az stdlib és a többi a C része (std asszem a standard rövidítése), ha van fönn C fordítom akkor ezek is, ellenben pl. a math függvény gyűjteménynek nem is kell fenn lennie, ezért kell külön jelezzem a fordítónak, hogy keresse meg és linkelje. Mivel ez nem része a C-nek, külön kell linkelni.
Valami ilyesmi ugye? -
czappa
aktív tag
Van egy kérdés, ami régóta foglalkoztat, de nem találtam meg a választ,
pl. ezeket include-oljuk:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>Az első kettővel nincs semmi "gond", viszont at utolsó header file-hoz, hogy használhassam, a linkernek meg kell mondjam, hogy linkelje a math.h-t (már ha jól értem...), így: gcc -lm progi.c
Megtudná nekem valaki mondani, hogy miért van erre szükség? Illetve, hogy az első kettőnél miért nincs?
Előre is köszi. -
czappa
aktív tag
Elkezdtem (volna) telepíteni:
futtatási jog megadása, majd ./bootstrap
Erre ezt írja:
bash: ./bootstrap: /bin/sh^M: bad interpreter: Nincs ilyen fájl vagy könyvtár
Debianos binary meg - már - nincs fenn ezen az oldalon:
[link]
Van ötleted, hogyan telepítsem?
ui.: nem tudom miért rossz a link, idemásolom:
http://wiki.codeblocks.org/index.php?title=Compiled_packages_of_Code::Blocks
[Szerkesztve] -
czappa
aktív tag
Azok segítségét szeretném kérni, akik Anjuta IDE-t haszználnak.
Van 3 fileom:
1)main.c
#include <stdio.h>
#include ''masodik.h''
int main()
{
int c;
c = atlag(2,5);
printf(''%d'',c);
return (0);
}
2)masodik_num.c
#include ''masodik.h''
int atlag(int a, int b){
return ((a + b) / 2 );
}
3)masodik.h
int atlag(int a, int b);
Terminálban tökéletesen le tudom fordítani, gcc -c main.c ill. gcc -c masodik_num.c, majd gcc main.o masodik_num.o parancsokkal; majd a bináris fájlt tudom futattni.
A gond az, hogy Anjuta IDE-ben nem megy. Eleinte mindenféle hibákat írt ki, de guglizással s aptitude-dal való letöltögetéssel előrébb léptem, de még mindig nem jó.
Pontosan ugyan azt írja ki, mintha a fönti terminálos példánál rögtön gcc main.c-vel szerettem volna fordítani:
main.o: In function `main':
/home/czappa/Projects/masodik/src/main.c:10: undefined reference to `atlag'
collect2: ld returned 1 exit status
Gondolom a linkeléssel lehet baj, és biztos be kéne állítanom vmit az anjutában de nem tudom mit.
Nehezíti a helyzetem, hogy bár több programozási nyelvet ismerek (valamennyire...) a c nincs köztük, és linuxszal sem foglalkozom túl rég óta.
A segítségeket előre is köszi.
[Szerkesztve]
Aktív témák
- Milyen egeret válasszak?
- Vezetékes FEJhallgatók
- AMD Navi Radeon™ RX 9xxx sorozat
- Milyen TV-t vegyek?
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- DUNE médialejátszók topicja
- Hardcore café
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- LG 34WQ75X-B - 34" Ívelt IPS Panel - 3440x1440 2K QHD - 60Hz 5ms - FreeSync - USB Type-C 90W
- HIBÁTLAN iPhone SE 2020 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS2192, 100% Akkumulátor
- Honor MagicBook 16 Ryzen 5 5600H 16GB 512GB FHD 144Hz
- Azonnali készpénzes Intel i3 i5 i7 i9 12/13/14 gen processzor felvásárlás személyesen / csomagküldés
- HIBÁTLAN iPhone 14 Pro Max 256GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3010
Állásajánlatok
Cég: FOTC
Város: Budapest