- Luck Dragon: Asszociációs játék. :)
- GoodSpeed: MacBook egy kis gikszerrel.
- Doky586: SecureBoot kulcsok frissítése (2026 nyara)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Szólánc.
- Lalikiraly: Macbook NEO 2
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: MárkaLánc
- Mr Dini: Mindent a StreamSharkról!
- crok: Android ADB, TWRP, ROM, GApps, MicroG, Shizuku, APK és egyéb segédeszközök
-
4472 - 4401
4472 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
FuRiONight
addikt
Sziasztok!
Új ambiciózus projekthez keresek fejleszőket/grafikusokat!
Kérlek minnél többen töltsétek ki!
Ha érkelne a projekt privát üzenetben több infó!
A digitális evolúció veled kezdődik
-
spagetti_8
csendes tag
Az álláshirdetések is egyre fogynak a C++-területen (legalábbis itt Hungary-ben)

-
jattila48
aktív tag
Azt hiszem, sikerült kisilabizálni a választ. Függvény nevek esetén a név dekoráció (vagy manglálás) azért kell, hogy a linker meg tudja különböztetni az overload-olt fv. neveket. Ez világos (és eddig is az volt). Függvény pointer nevek azonban nem overload-olhatók, ezért ott nincs szükség név dekorációra, így az extern "C" deklarációnak (ami elnyomja a C++ név dekorációt) sincs értelme. Gondoltam én. Csakhogy fv. pointer nevek esetén a dekorációt nem az overload-olás miatt használják, hanem a hívási konvenció miatt. A különböző TU-kban deklarált és definiált ugyanolyan nevű fv. pointereknek meg kell egyezni a hívási konvencióban. Eddig azt gondoltam, hogy nincs külön C és C++ hívási konvenció (mint ahogy MS fordítóknál nincs is), de elképzelhető, hogy más fordítóknál ez másképp van. Legalábbis a lehetőségét fenntartják.
érdekes olvasmány: [link]
Idézet a cppreference.com -ról:
"Since language linkage is part of every function type, pointers to functions maintain language linkage as well. Language linkage of function types (which represents calling convention) and language linkage of function names (which represents name mangling) are independent of each other"
Tehát a fv. típus és fv. név language linkage-e (mint pl. az extern "C") két különböző, és független dolog. Eszerint fv. pointer esetén a language linkage a pointer által mutatott fv. típusára utal (hívási konvenció), nem pedig a fv. pointer névre.
Elnézést a hosszú hozzászólásért, remélem azért érthető volt min problémáztam.
-
coco2
őstag
A lentiek akkor tudnak neked magyarázatul szolgálni, ha legacy problémákba ütköztél bele.
A C és a C++ linkelések eltérőek. A legacy környezetekkel kompatibilis linkelés kötelezően támogatott mindegyik fordító által, de külön jelezned kell, ha azt kívánod használni.
A C++ linkelés néhány verziónként eltér, és nem lehet azok között átugrálni. Egy nagyon régi projekthez előrefordított C++ dll-t nem tudsz új projektekben betölteni. Próbáld ki, és meglátod. Forráskódot kell újrafordítani jelenkori verzió alatt. Ha azt meg tudod tenni, akkor értelmetlen a vacakolás - ahogy írtad. De ha csak bináris formában van rádhagyva egy régi C++ dll, és nincsen lehetőséged újrafordításra, akkor bizony workaround kell. Egyik lehetőségként visszatérhetsz régebbi C++ fordítóra, és használhatod a teljes projekthez. Feltéve, hogy a toolchain-ed nem kényszerít rád újabb verziót. Ha abba ütköztél bele, akkor rámicsodáltál. Egy régebbi C++ dll binárisa lehetségesen kuka. Egy C dll örökéletű. A C idejében még nem volt verziók közötti kompatibilitási gond, és a mai napig nincsen.
Ami probléma egy előrefordított C dll-el lenni tud, az a target cpu. Legacy C dll-ek várhatóan x86. De azóta már előfordul armv7 és x64 is. Eltérő platformokon nem tudsz keresztül linkelni.
-
cog777
őstag
Azt hittem azt kerdezed hogy csak a declaraciora vonatkozik az extern "c" vagy az implementaciora is.
A fenti peldaban mindkettot ajanljak, ha tobbfele forditot hasznalsz.Ha a valtozora kerdezel ra, akkor igen lehet hasznalni arra is, ugyanabbol a celbol.
Language linkage - cppreference.com -
jattila48
aktív tag
-
cog777
őstag
Nem kotelezo, de az okosok azt irjak hogy erdemes lehet hasznalni.
Utolso elotti hozzaszolas.
"We had always only added extern "C" to the header definitions, but this allows the C++ code to implement the function with a different signature via overloading without errors and yet it doesn't mangle the symbol definition so at link times it uses this mismatching function. If the header and the definition both have extern "C" then a mismatched signature generates an error with Visual Studio 2017 and with g++ 5.4." -
jattila48
aktív tag
-
cog777
őstag
Funkcio nevet c-vel kompatibilissa teszi. Jol jon ha a library-t hozza akarod forditani mas c++ forditoban keszult projektel vagy akar mas nyelvben pl python akarod hasznalni.
Minden c++ forditobak megvan a maga formatuma, c viszont kompatibilis.
linux alatt vannak parancsok amivel ezt meg tudod nezni ha erdekel. -
DrojDtroll
veterán
Nem. Webes lesz. Sok mindent nem akarok, a háttérben prefetch-elem a szükséges értékeket, ebből egy statikus html oldalt készítek. Sok lesz az igen/nem kimenetelű mérés. Ezeket aggregálni szeretném, és csak a hibákat külön megjeleníteni. Ahol számértékek lesznek ott egyszerű táblázatok fogok használni az adatok megjelenítésére.
-
Steve_Brown
senior tag
Qt-val csinálnád?
-
DrojDtroll
veterán
Én most akarok belefogni egy hobby c++ projektbe. Akarok egy olyan dashboardot a homelab-hoz ami egy szempillantás alatt betölt.
-
Steve_Brown
senior tag
Elég kihalt ez a topik. Pedig a menők C++-ban programoznak.
-
cog777
őstag
https://godbolt.org/-ot nem is ismertem, asm-et mutat egy c++ programrol.
-
cog777
őstag
Tobb megoldast kaptam, itt lehet elolvasni.
Lenyeg: van lehetoseg trukkozni, de az tenyleg trukkozes, inkabb template specializaciot valasztanek.Ez a megoldas tetszett jobban:
#include <fmt/format.h>
#include <array>
#include <cstddef>
#include <mutex>
enum class thread_safety_mode {
safe,
unsafe,
};
template <typename T, std::size_t Size, thread_safety_mode Mode>
class circular_buffer;
template <typename T, std::size_t Size>
class circular_buffer<T, Size, thread_safety_mode::unsafe> {
public:
// Push an item to the tail
bool push(const T& item) {
if (is_full()) return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T& item) {
if (is_empty()) return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const { return (head_ + 1) % buffer_.size() == tail_; }
// Check if the buffer is empty
bool is_empty() const { return head_ == tail_; }
private:
std::array<T, Size> buffer_;
std::size_t head_{0};
std::size_t tail_{0};
};
template <typename T, std::size_t Size>
class circular_buffer<T, Size, thread_safety_mode::safe> {
public:
bool push(const T& item) {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for push()");
return unsafe_buffer.push(item);
}
// Pop an item from the head
bool pop(T& item) {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for pop()");
return unsafe_buffer.pop(item);
}
// Check if the buffer is full
bool is_full() const {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for is_full()");
return unsafe_buffer.is_full();
}
// Check if the buffer is empty
bool is_empty() const {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for is_empty()");
return unsafe_buffer.is_empty();
}
private:
circular_buffer<T, Size, thread_safety_mode::unsafe> unsafe_buffer{};
mutable std::mutex m{};
};
auto main() -> int {
//
circular_buffer<int, 42, thread_safety_mode::safe> cb{};
cb.push(43);
cb.push(44);
cb.push(45);
int val;
cb.pop(val);
fmt::println("val: {}", val);
cb.pop(val);
fmt::println("val: {}", val);
cb.pop(val);
fmt::println("val: {}", val);
} -
cog777
őstag
Masik kerdes.
Adja magat egy thread es egy nem thread safe verzioja a circual_buffer-nek.
Forditasi idoben meg tudom mondani hogy a mutex-es sorok letiltodjanak vagy engedelyezve legyenek template-et hasznalva?Valami ilyesmire gondoltam, ugyanakkor forditasi hibaim vannak:
#pragma once
#include <array>
#include <stddef.h>
#include <mutex>
enum class THREAD_SAFETY
{
THREAD_SAFE = 0,
NOT_THREAD_SAFE
};
template <typename T, size_t S, THREAD_SAFETY TH>
class circular_buffer
{
public:
explicit circular_buffer() {}
// Push an item to the tail
bool push(const T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_full())
return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_empty())
return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return (head_ + 1) % buffer_.size() == tail_;
}
// Check if the buffer is empty
bool is_empty() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return head_ == tail_;
}
private:
std::array<T, S> buffer_;
size_t head_{0};
size_t tail_{0};
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
mutable std::recursive_mutex m;
}
};main.cpp-ben:
circular_buffer<int, 5, THREAD_SAFETY::THREAD_SAFE> buffer;De sajnos hibakat ir ki:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:70:5: error: expected unqualified-id before ‘if’
70 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
| ^~
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h: In member function ‘bool circular_buffer<T, S, TH>::push(const T&)’:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:21:66: error: type/value mismatch at argument 1 in template parameter list for ‘template<class, class> struct std::is_same’
21 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)Masreszt nem vagyok biztos hogy a constexpr if-ek valodi blokkent mukodnek, tehat a lock_guard mukodni fog-e...
-
cog777
őstag
Le tudna valaki csekkolni ezt a kodot? Tok mas teruleten dolgoztam mostanaban es radobbentem, hogy bizonytalan vagyok most ebben az alap kerdesben. Consumer-producer, thread safe circular buffer-rel + recursize mutex.
Lefordul, mukodik crash nelkul, de kivancsi vagyok hogy elszabtam-e valamit... koszi elore is.

Circular buffer kodja:
circular_buffer.h#pragma once
#include <array>
#include <stddef.h>
#include <mutex>
template <typename T, size_t S>
class circular_buffer
{
public:
explicit circular_buffer() {}
// Push an item to the tail
bool push(const T &item)
{
std::lock_guard<std::recursive_mutex> lk(m);
if (is_full())
return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T &item)
{
std::lock_guard<std::recursive_mutex> lk(m);
if (is_empty())
return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const
{
std::lock_guard<std::recursive_mutex> lk(m);
return (head_ + 1) % buffer_.size() == tail_;
}
// Check if the buffer is empty
bool is_empty() const
{
std::lock_guard<std::recursive_mutex> lk(m);
return head_ == tail_;
}
private:
std::array<T, S> buffer_;
size_t head_{0};
size_t tail_{0};
mutable std::recursive_mutex m;
};main.cpp
#include "circular_buffer.h"
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
circular_buffer<int, 5> buffer;
std::mutex mtx; // Mutex for protecting shared data
std::condition_variable empty, full; // Condition variables
void producer(int loops)
{
for (int i = 0; i < loops; ++i)
{
std::unique_lock<std::mutex> lock(mtx);
while (buffer.is_full())
{
empty.wait(lock); // Wait if buffer is full
}
buffer.push(i);
full.notify_one(); // Signal that buffer is not empty
std::cout << "Produced: " << i << std::endl;
}
}
void consumer(int loops)
{
for (int i = 0; i < loops; ++i)
{
std::unique_lock<std::mutex> lock(mtx);
while (buffer.is_empty())
{
full.wait(lock); // Wait if buffer is empty
}
int tmp;
buffer.pop(tmp);
empty.notify_one(); // Signal that buffer is not full
std::cout << "Consumed: " << tmp << std::endl;
}
}
int main()
{
int loops = 10;
std::thread prodThread(producer, loops);
std::thread consThread(consumer, loops);
prodThread.join();
consThread.join();
return 0;
} -
Archttila
veterán
Na, csak megoldottam
most viszont a decodernel problemazik (de legalabb mar kozelebb vagyok a vegehez)
Found ninja-1.11.1 at /usr/bin/ninja
[456/733] Compiling C++ object src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o
FAILED: src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o
clang++ -Isrc/decoder/plugins/libdecoder_plugins.a.p -Isrc/decoder/plugins -I../src/decoder/plugins -Isrc -I../src -I. -I.. -Isrc/lib/sacdiso -I../src/lib/sacdiso -I../src/lib/sacdiso/libdstdec -I../src/lib/sacdiso/libdstdec/binding -I../src/lib/sacdiso/libdstdec/decoder -Isrc/lib/dvdaiso -I../src/lib/dvdaiso -I../src/lib/dvdaiso/libmlpdec -I../src/lib/dvdaiso/libmlpdec/libavutil -I../src/lib/dvdaiso/libudf -I/usr/include/spa-0.2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-6 -I/usr/include/opus -I/usr/include/pipewire-0.3 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/libinstpatch-2 -I/usr/include/SDL2 -fdiagnostics-color=always -D_GLIBCXX_ASSERTIONS=1 -D_LIBCPP_ENABLE_ASSERTIONS=1 -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++2a -ffast-math -ftree-vectorize -Wcast-qual -Wdouble-promotion -Wmissing-declarations -Wshadow -Wunused -Wvla -Wwrite-strings -Wunreachable-code-aggressive -Wused-but-marked-unused -fno-threadsafe-statics -fmerge-all-constants -Wextra-semi -Wmismatched-tags -Woverloaded-virtual -Wsign-promo -Wno-non-virtual-dtor -Wcomma -Wheader-hygiene -Winconsistent-missing-destructor-override -Wsuggest-override -fvisibility=hidden -ffunction-sections -fdata-sections -D_GNU_SOURCE -march=native -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/tmp/makepkg/mpd-sacd/src=/usr/src/debug/mpd-sacd -flto=auto -fPIC -pthread -D_REENTRANT -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -MD -MQ src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o -MF src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o.d -o src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o -c ../src/decoder/plugins/FfmpegIo.cxx
../src/decoder/plugins/FfmpegIo.cxx:28:10: error: use of undeclared identifier 'AVERROR_EOF'
28 | return AVERROR_EOF;
| ^
1 error generated. -
Archttila
veterán
-
Archttila
veterán
Sziasztok!
Nem vagyok programozo, ezert szuksegem lenne egy kis segitsegre az alabbi program forditasahoz [link] ( PKGBUILD [link] )
Szoval a lenyeg, hogy miutan helyrepofoztam a fuggosegeket, ninja az alabbi hibaval eldobja az egeszet [link]
Abban bizom, hogy csak az env reszt kell kiegesziteni valamivel a PKGBUILD-be.![;]](//cdn.rios.hu/dl/s/v1.gif)
)env CC=clang CXX=clang++ arch-meson .. ${_opts[@]}ninja}
Az SACD tamogatas miatt lenne fontos hogy mukodjon.. -
cog777
őstag
-
Tomi_78
aktív tag
-
cog777
őstag
Tud valaki c++ teszteket? Lehetoleg advanced level-t vagy magasabbat, akarok allas interjuzni a kozeljovoben es bizonyos dolgokban berozsdasodtam. Linkedin-en van par kurzus c++20-al kapcsolatban, de ugy erzem jo lenne teszteket csinalgatnom.
-
Tomi_78
aktív tag
Igen, 3.0.x.-essel már hiba nélkül működik; köszi a segítséget!
Azt hittem, a verzió kiválasztása a varázslóban csak amolyan tájékoztató jellegű, és ami fontos az az a mappa, amit én megadok, amiben a wxWidgets van. De úgy látszik, nem így van. Meg az is bekavart, hogy a legújabb CodeBlocks a legújabb wxWidgetst még nem ismeri. -
dabadab
titán
-
Tomi_78
aktív tag
-
dabadab
titán
Disclaimer: se CodeBlocksot, se wxWidgetset nem használtam soha.
Ez azt jelenti, hogy nem találja a wxmsw31ud.lib könyvtárat (gondolom ez lehet a wxWidgets). Ennek oka lehet pl. az, hogy a 3.2.4-es verzióban ez wxmsw32ud.lib néven fut (vagyis szólni kellene a Code Blocksnak, hogy ne 3.1-et akarjon használni) ésvagy nincs jól beállítva a CodeBlocksban a wxWidgets elérési útja.
-
Tomi_78
aktív tag
Sziasztok!
Van itt valaki, aki Code Blocks-t használ wxWidgets-szel C++ programozáshoz?
Azért kérdezem, mert én megpróbáltam volna ezt, és ehhez fel is telepítettem mindkettőt a számítógépemre (CB 20.03 és wxWidgets 3.2.4-et), megcsináltam a beállításokat, indítás után be is jön a GUI, de amikor futtatnám a programomat, mindig az
ld.exe cannot find -lwxmsw31ud
hibaüzenetet mutatja.
Mit jelent ez és hogyan javítható ki? -
pocokxx
Közösségépítő
Csak egy kódrészletet adtam; a deklarásokat most lespóroltam az elejéről... Azért adtam most ilyen nevet, hogy jobban átlátható legyen, hogy mit szeretnék kapni eredményképpen.
A linkelt feladatban mondjuk kérdés, hogy van-e negatív szám az adott halmazban, és ha van, akkor hányadik a sorban?
A "királyfi" 38, de most jutott el oda, hogy talán érdemes lenne foglalkozni kicsit mélyebben ezekkel a felszínkapargatás helyett... -
dabadab
titán
gondolom ezért foglalkozunk csak így vele.
Hát... hány éves vagy, királyfi?...

A kiválasztás (eldöntés + keresés) típusalgoritmusnál használhatok for ciklust simán bool nélkül?
Szerintem nem értem a kérdést.
A mellékelt kódban nem látszik, hogy az elsonegativindexe* hogyan és hol lett inicializáva (már ha egyáltalán), márpedig az az értéke nem fog változni, mert ha a bevittadatok[i]* negatív, akkor a for a ciklusfeltétel miatt pont azelőtt megszakítja a ciklust, hogy értéket adnál neki.*: kódban ne használj magyar változóneveket és kommenteket. soha. tényleg soha.
-
pocokxx
Közösségépítő
Igen, valóban egyetemi jegyzet alapján dolgozom, és próbálom ezt megérteni. Igazából csak ebben a félévben kerül(t) elő, gondolom ezért foglalkozunk csak így vele.
De akkor jöjjön még egy ilyen fapados kérdés:A kiválasztás (eldöntés + keresés) típusalgoritmusnál használhatok for ciklust simán bool nélkül?
Mondjuk, ha el kell döntenem, hogy van-e a bevitt adatok között negatív szám, akkor ez az eljárás miért hoz fals eredményt?for (i=1; i <=n && bevittadatok[i]>=0; i++);
{ if (bevittadatok[i] < 0)
{ elsonegativindexe = i; }
}
cout << elsonegativindexe; -
dabadab
titán
Azért javasoltam, hogy olvass el valamit, ami megadja az alapokat.
Ez, amit írtál, tulajdonképpen szintaktiailag helyes (a struct }-ja után mondjuk hiányzik egy pontosvessző meg a két utolsó cin után hiányzik a >>), meg lefordul, meg azt is csinálja, amit szeretnél (kivéve, ha pl. a user százegynél több nevet akar megadni (mert valamiért nem a MAX_NEVEK számára foglalsz tömböt, hanem annál eggyel többre)) - csak hát így nem írunk C++-t.
A "const" az inkább "constexpr" kellene, hogy legyen, mert az jól láthatóan fordítási idejű konstans, de nincs is rá szükség, mert a C stílusú tömbök azok pont ugyanannyira nem valók C++ kódba, mint a goto, tessék az STL-t használni, a vector<string> tökéletes ide.
Na, és ezek miatt kellene valami rendes anyag, amit használsz és kifejezetten friss, up-to-date kell (amit csinálsz az ránézésre valami magyar egyetemi jegyzetből lehet, mert a negyedévszázados C++ fejlesztői karrierem során csak ott találkoztam azzal, hogy stdin-ről olvasnak be dolgokat
), mert a C++ dinamikusan fejlődő nyelv. -
cog777
őstag
-
pocokxx
Közösségépítő
Igen, tényleg nagyon hiányoznak az alapok, de tényleg szeretném megérteni...
Ilyesmi sorokról beszélek:struct NEV {
string keresztnev;
string csaladnév;
}
...
const int MAXN=100
string NEV NEVEK [MAXN+1]Beolvasásnál meg
cout << "Mennyi nev lesz?" ;
cin >> n;
for (i=1; i<=n; i++) {
cout << i << ". keresztnev: ";
cin Nevek[i].keresztnev;
cout << i << ". csaladnev:";
cin Nevek[i].csaladnev";}Ez így jó, vagy nagyon zagyva?
-
dabadab
titán
Hajjaj

A struct változót
A struct az nem változó, hanem egy típus leírása, pont úgy, ahogy a class is. Az ott csak a típusleírás, abból önmagában még nem keletkezik semmiféle változó.
Nálad valószínűleg azért kell odaraknod, mert a C++ fordító a fordítási egységben fentről lefele halad és ha azelőtt használsz egy típust, mielőtt megmondtad volna, hogy mi az, akkor az fordítási hibát okoz.
A struct mellé tömböt is deklarálni kell const paranccsal, aminek kötelező másik nevet adni?
A const nem parancs, hanem kulcsszó és a const tulajdonságot adja hozzá az adott deklarációhoz/definícióhoz (hogy az konkrétan mit jelent, az attól függ, hogy konkrétan mihez adod hozzá, változóknál pl. azt, hogy a kezdeti értékadáson túl nem lehet megváltoztatni az értéküket).
Egyébként amit ott csinálsz, az az, hogy létrehozod ténylegesen egy változót (amit a struct ugye nem csinál meg). Ennek nem kell feltétlenül tömbnek lennie (sőt, C++-ben a C stílusú tömbök leginkább kerülendők, mert csak a baj van velük), lehet egy sima változó is vagy valamilyen STL-es container, akármi.
Nem kötelező másik nevet adni, mert a C++ fordító van annyira okos, hogy tudja, hogy hol számíthat változó- és hol típusnévre, de nagyon érdemes, hogy ne legyen belőle keveredés (az elég bevett konvenció, hogy a típusnevek nagybetűvel kezdődnek, a változók meg kisbetűvel).
De a kérdéseid alapján az látszik, hogy az alapok nagyon hiányoznak nálad, érdemes lenne legalább az elején elolvasni valami bevezető anyagot, pl. akár ezt (ez már csak azért is jó, mert ott a weboldalon a c++ fordító is, azzal nem kell külön vacakolni az elején, amikor még amúgy is minden nagyon zavaros).
-
pocokxx
Közösségépítő
Sziasztok!
Egy-két amatőr kérdéssel fárasztanám a társaságot. Codeblocks-sal proóbálkozom.
A struct változót miért kell az int main() elé írni?
A struct mellé tömböt is deklarálni kell const paranccsal, aminek kötelező másik nevet adni? -
cog777
őstag
-
cog777
őstag
cmake kerdesem van. Egy eleg nagy projektben (600 cmakefiles) kell egy uj ficsort keszitenem. A problema a korkoros dependency.
Szoval protokol modul hasznalta a driver-t. Driver object-kent volt, protocol static-kent forditva.
Most az uj ficsor a driver-bol hasznal protokolt. Igy cmake kiirta hogy ez biza cyclic dependency es legalabb 1 target nem static.Valoban, driver nem az.
Nosza allittsuk at object-rol static-ra.
Lefordul, orom bodotta.
Vazz, a ficsor kodja lefordul, latom a logban de nem linkelodik ossze es nem is tudok breakpoint-ot tenni ra. Mikor objectkent volt linkelve akkor breakpoint mukodott.
Persze, megallapitottuk hogy ezt a reszt ujra kellene strukturalni, de most 1 ideiglenes megoldast kell csinalnom.
Megkoszonom ha valaki hozza tudna szolni a szituaciohoz es adni tanacsot
-
kispx
addikt
-
MiniXD55
tag
-
kispx
addikt
-
MiniXD55
tag
-
MiniXD55
tag
bool ultetve[darab];
for (int i = 0; i < darab; i++) ultetve[i] = false; // kezdetben nincs egyikse ültetve
int beultetes = 0;
int felajanlasok = 0;
int seged5;
int i = 0;
for (i = 0; i < darab; i++)
{
//cout << kezdet[i] << " " << veg[i] << endl;
if (kezdet[i] < veg[i]) seged5 = 0;
else seged5 = kezdet[i];
//cout << seged5 << endl;
if (veg[i] >= kezdet[i])
for (int l = kezdet[i]; l < veg[i] + 1; l++)
{
felajanlasok++;
//cout << kezdet[i];// pl 1-3 esetén csak kkettőig futna le, mivel 3 nem kisebb mint 3
ultetve[i - 1] = true;
}
}
for (int i = 0; i < darab; i++) cout << ultetve[i] << " " ;
for (int i = 0; i < darab; i++) if (ultetve[i]) beultetes++;
{
//cout << beultetes;
if (darab == beultetes) cout << "Minden agyas beültetésére van jelentkezo.";
else if (felajanlasok >= darab) cout << "Atszervezessel megoldhato a beultetes.";
else cout << "A beultetes nem oldhato meg.";
}
string virag_szine[agyasokszama] = {""};
int virag_sorszam[agyasokszama] = { 0 };
for (int i = 0; i < agyasokszama; i++)
{
virag_szine[i] = "#";
virag_sorszam[i] = 0;
}
for (int m = 0; m < darab; i++)
{
for (int n = 0; n < agyasokszama; i++)
{
if (virag_szine[n] == "#")
{
if (n >= kezdet[m])
{
virag_szine[n] = szin[m];
virag_sorszam[n] = m + 1;
}
}
}
}
for (int i = 0; i < darab; i++)
{
cout << virag_szine[i] << " " << virag_sorszam << endl;
}
return 0;
} -
kispx
addikt
-
MiniXD55
tag
-
MiniXD55
tag
-
CPT.Pirk
Jómunkásember
-
dabadab
titán
-
CPT.Pirk
Jómunkásember
Sziasztok,
Arduino alatt működő, stewart platform koordináta transzformáló kód részletet szeretnék átvinni az őt irányító Raspberry-re, mert egyszerűen nem végez időben a gyenge kis Arduino a számításokkal.
Az Rpi-n fut a szerkezet vezérlő programja, ahová ebben a formában beépítettem: https://pastebin.com/PHkg33Xh
Nincs fordítási hibám, de mikor ehhez a sorhoz ér a kód futása, akkor elszáll a program hibaüzi nélkül:platEnd[motor].x = rotationMatrix[0] * (platStart[motor].x - poi.x) + rotationMatrix[1] * (platStart[motor].y - poi.y) + rotationMatrix[2] * (platStart[motor].z - poi.z) + x + (platStart[motor].x - poi.x);
Akkor is, ha csak ennyi van ott:platEnd[motor].x = rotationMatrix[0];
A baloldali rész az int16, az egyenlőség jobb oldalán float van.Próbáltam castolni igy, de elhal így is:
platEnd[motor].x = static_cast<int16_t>rotationMatrix[0];
Viszont ha kézzel odaírok egyplatEnd[motor].x = 12,3;-at, akkor azzal semmi baja.
-
MiniXD55
tag
Beszéltem a tanárommal, aki tanítja nekem ezt az egészet, jelenleg úgy fogalmazott hogy ilyen rövid időn belül, amely rendelkezésünkre áll, a vizsgáig nem gondolja, hogy szükséges.
Ez a kód amit beküldtem, codeblocks-ban teljesen szuperül lefut, a vs amin futtatnám egy teljesen szűz vs. -
MiniXD55
tag
-
kispx
addikt
-
daninet
veterán
Igen, meg az első homingnál lehetne az időt mérni, mert ugye mindig máskor kapcsolom ki. Vannak elméleti ötleteim. Ezt egy arduinonál még lehet megoldanám, csak itt bőven meghaladja a képességeimet.
Azt is elfogadom válasznak, ha nem lehet ennyivel megoldani, valamiért azt várom picit lesz valaminegysoros akármi amit oda berakhatok és menni fog. De azt is elfogadom válasznak ha nincs ilyen. -
DrojDtroll
veterán
-
daninet
veterán
Elvileg C++, igen (70%-ban, 30-ban C). De javíts ki ha nem, átrakom másik topikba. Marlin firmware-t akarom módosítani. Volt már itt téma, akkor te segítettél, de az igényeim alacsonyabbak voltak
, csak újra akartam indítani a sorozatot, működött is.
Szóval alant a kódban a random(2,10); függvényt használtam, de mint írtátok, ez ugyanazt a sorozatot generálja mindig, nekem ez nem jó.
Hogy értsétek, erről a homokba rajzolós asztalról van szó. SD kártyán vannak a minták, indításnál az auto0.g fájl tartalmazza a homing sequence-t, a többi auto1.g - auto9.g a mintákat amiket rajzol. Mivel ezek órákig mennek nem poén, ha mindig bekapcsolom és ugyanazzal indul. Jó lenne, ha random választana egy számot 2-10ig (függvényben alul van egy x-1) és akkor valamelyik mintát elkezdené rajzolni.
Kontextusnak annyi, hogy elkezdi beolvasni az SD kártya tartalmát a program, és ha nincs ott egy fájl amit áramkimaradás esetén akkor kezdi a kód szerint az auto0.g-tmod: elég rossz itt a kódformázás, itt egy pastebin link: https://pastebin.com/zFwjc0y9
#if DISABLED(NO_SD_AUTOSTART)/*** Run all the auto#.g files. Called:* - On boot after successful card init.* - From the LCD command to Run Auto Files*/void CardReader::autofile_begin() {autofile_index = 1;(void)autofile_check();}/*** Run the next auto#.g file. Called:* - On boot after successful card init* - After finishing the previous auto#.g file* - From the LCD command to begin the auto#.g files** Return 'true' if an auto file was started*/bool CardReader::autofile_check() {if (!autofile_index) return false;if (!isMounted())mount();else if (ENABLED(SDCARD_EEPROM_EMULATION))settings.first_load();// Don't run auto#.g when a PLR file existsif (isMounted() && TERN1(POWER_LOSS_RECOVERY, !recovery.valid())) {char autoname[10];sprintf_P(autoname, PSTR("/auto%c.g"), '0' + autofile_index - 1);if (fileExists(autoname)) {cdroot();openAndPrintFile(autoname);// Generate a random number between 2 and 10int randomNumber = random(2,10);autofile_index = randomNumber;//return true;}}autofile_cancel();return false;}#endif -
dabadab
titán
-
dabadab
titán
Hát, akkor ideje lenne megismerkedni a C++-os konténerekkel

Mondjuk az std::vector használatához alig valami kell változtatni.
-
sztanozs
veterán
-
daninet
veterán
Sziasztok!
Teljesen noob kérdés:
Random int számot kellene generálnom egy mikrokontrolleren, de nincs órája és limitált a memória. Szóval kóddal kellene megoldalni anélkül, hogy behívok bármilyen library-t.
Végignéztem a keresőben egy csomó találatot de mindenhol az órával variálnak. Nekem ugyanez kóddal kell, valami memória hash-elős akármilyen trükkel.
Hogyan oldható ez meg? -
MiniXD55
tag
-
MiniXD55
tag
-
cattus
addikt
-
MiniXD55
tag
Sziasztok!
Újra én lennék az akinek segíteni kellene, mellékelek egy képet illetve a kódot is amit írtam:#include <iostream>
#include <fstream>
#include <math.h>
#include <iomanip>using namespace std;
int eltelt(int ido1, int ido2);
int main()
{
int ora[1000];
int perc[1000];
int mperc[1000];
int xkor[1000];
int ykor[1000];
int ido[1000];
int darab=0;
cout << "1. feladat" << endl;ifstream befajl;
befajl.open("jel.txt");
while(!befajl.eof())
{
befajl >> ora[darab] >> perc[darab] >> mperc[darab] >> xkor[darab] >> ykor[darab];
darab++;
}
for(int i=0; i<darab-1;i++)
{
ido[i]=ora[i]*3600 + perc[i]*60 + mperc[i];
//cout << ora[i] << perc[i] << mperc[i] << xkor[i] << ykor[i] << endl;
//cout << ido[i] << endl;
}
befajl.close();cout << "2. feladat" << endl;
int sorszam;
cout << "Adja meg a jel sorszámát! ";
//cin >> sorszam;
sorszam = 3;
cout << "x=" << xkor[sorszam-1] << " y=" << ykor[sorszam-1];
int eltelt_ido=eltelt(ido[0],ido[darab-2]);
cout << "4. feladat\nIdotartam: " << eltelt_ido/3600 << ":" << eltelt(ido[0],ido[darab-2])/60%60 <<":" << eltelt(ido[0],ido[darab-2])%60;cout << "5. feladat" << endl;
int min_x=xkor[0];
int min_y=ykor[0];
int max_x=xkor[0];
int max_y=ykor[0];
for(int i=0; i<darab-1;i++)
{
if (min_x>xkor[i]) min_x=xkor[i];
if (min_y>ykor[i]) min_y=ykor[i];
if (max_x<xkor[i]) max_x=xkor[i];
if (max_y<ykor[i]) max_y=ykor[i];
}
cout << "Bal alsó: " << min_x << " " << min_y << ", jobb felsõ: " << max_x << " " << max_y;cout << "6. feladat" << endl;
float elmozdulas=0.000;
for(int i=0; i<darab-2;i++)
{
elmozdulas+=sqrt(pow(xkor[i]-xkor[i+1],2)+pow(ykor[i]-ykor[i+1],2));
//cout << elmozdulas << endl;
}cout << round(elmozdulas);
return 0;
} -
dabadab
titán
-
MiniXD55
tag
-
dabadab
titán
-
MiniXD55
tag
Sziasztok!
Szeretnék segítséget kérni, visual studio 2019-el kezdek programozni, és jelenleg egy olyan problémába futok bele minden egyes feladatnál, hogy a visual studio nem akarja megnyitni az adott txt file-t. A következő error kódot kapom: MSB8020 BUILD TOOLS V143.
Tudnátok ebben segíteni, hogy mi lehet a probléma?
Próbáltam a debug mappába berakni a fájlt, de ott se találja illetve próbáltam manuálisan tallózni, de akkor se akarta.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string datum[400];
string nev[400];
string resz[400];
int hossz[400];
int latta[400];
int n = 0;
ifstream be;
be.open("lista-1.txt",);
while(!be.eof())
{
be >> datum[n] >> nev[n] >> resz[n] >> hossz[n] >> latta[n];
n++;
} -
Tomi_78
aktív tag
-
Tomi_78
aktív tag
Sziasztok ismét, szakértők!
Felmerült még pár hiba kicsiny programom fejlesztése közben, amit segítség nélkül nem tudok megoldani.
Az első, hogy így íratok ki szöveget:static const WCHAR pontszoveg[]= L"PONTJAID:";
TextOut(Memhdc,80,4,pontszoveg,wcslen(pontszoveg));
ami így jó is, viszont számokat már nem tudok kiíratni, mert pl. erre:char jatpontjai[3];
itoa(jatekospontjai,jatpontjai,10);
TextOut(Memhdc,80,4+28,jatpontjai,wcslen(jatpontjai));
már ezt a hibaüzenetet kapom:
|911|error: cannot convert 'char*' to 'const wchar_t*' for argument '1' to 'size_t wcslen(const wchar_t*)'|
A második kérdésem, hogy meg lehet-e határozni és ha igen, akkor hogyan egy ilyen szöveg képpontokban mért szélességét, hogy a képernyő közepére lehessen kiírni:static const WCHAR cimszoveg[]= L"Játék címe";TextOut(Memhdc, ablakszel/2,4,cimszoveg,wcslen(cimszoveg));
és végül, le lehet-e valahogy tiltani a játékablak átméretezhetőségének lehetőségét, hogy a felhasználó csak egy fix, teljesképernyős módban használhassa a programot?
Új hozzászólás Aktív témák
-
4472 - 4401
4472 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- WoW avagy World of Warcraft -=MMORPG=-
- Bestbuy játékok
- Megújult mobilos felület, fórumos ráncfelvarrás a PROHARDVER! lapcsaládon
- Tőzsde és gazdaság
- Luck Dragon: Asszociációs játék. :)
- Diablo IV
- Elektromos cigaretta 🔞
- Kamionok, fuvarozás, logisztika topik
- Október 6-án jelenik meg a Star Wars: Galactic Racer
- További aktív témák...
- BESZÁMÍTÁS! Apple Watch Series 11 46mm okosóra garanciával hibátlan működéssel
- BESZÁMÍTÁS! Apple iPhone 17 Pro 256GB mobiltelefon garanciával hibátlan működéssel
- BESZÁMÍTÁS! MSI Katana 15 B14WEK-234 GAMER notebook - i7 14650HX 16GB DDR5 1TB SSD RTX 5060 8GB W11
- BESZÁMÍTÁS! LENOVO Legion Pro 5 GAMER notebook - R9 8945HX 32GB DDR5 1TB SSD RTX 5060 8GB WIN11
- BESZÁMÍTÁS! ASUS ROG Ally X 24GB/1TB kézikonzol garanciával, hibátlan működéssel
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- Dell USB-C, Thunderbolt 3, TB3, TB4 dokkolók (K20A) WD19TB / WD19TBS / WD22TB4
- Honor 400 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- iking.hu Apple iPhone XR 64GB használt White megkímélt 100% akku 6 hónap garancia
- Apple iPhone 12 64GB,Használt,Adatkabel,12 hónap garanciával
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

most viszont a decodernel problemazik (de legalabb mar kozelebb vagyok a vegehez) ![;]](http://cdn.rios.hu/dl/s/v1.gif)
), mert a C++ dinamikusan fejlődő nyelv.
