Hirdetés
- Milyen billentyűzetet vegyek?
- HiFi műszaki szemmel - sztereó hangrendszerek
- Melyik tápegységet vegyem?
- Fujifilm X
- Vezetékes FEJhallgatók
- T Tablet 2 5G - megkopott magenta
- Philips LCD és LED TV-k
- A 3D V-Cache és a rengeteg memória lehet az új PlayStation fő fejlesztési iránya
- PLC programozás
- VR topik (Oculus Rift, stb.)
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
- Bomba ár! HP EliteBook 2560P - i5-2540M I 4GB I 250GB I DVDRW I 12,5" HD I W10 I Garancia!
- Bomba ár! Dell Latitude E6410 - i5 I 4GB I 160GB I DVDRW I 14,1" WXGA I Cam I W10 I Gari!
- Bomba ár! Dell Latitude 7480 - i5-6GEN I 8GB I 256GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- Bomba ár! Dell Latitude 7400 - i5-8GEN I 16GB I 256GB SSD I 14" FHD IPS I CAM I W10 I Garancia
- Keresek Samsung 870 QVO 8TB SATA SSD-t
- 122 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 - 4 év garancia (ELKELT)
- 121 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 - 4 év garancia (ELKELT)
- Bomba ár! Dell Latitude 5400 - i7-8GEN I 8GB I 256SSD I 14" FHD I HDMI I Cam I W11 I Gari!
- DELL PowerEdge R740 rack szerver - 2xGold 6248 (20c/40t, 2.5/3.9GHz), 512GB RAM, 10Gbit HBA330, áfás
- Telefon felvásárlás!! iPhone X/iPhone Xs/iPhone XR/iPhone Xs Max
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest