abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
včera 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 4
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
20.1. 00:11 | Zajímavý článek

Výrobce síťových prvků, společnost Netgear, spustila nový program, který slibuje vývojářům, expertům, ale i běžným uživatelům vyplacení finanční odměny za nalezení bezpečnostních chyby v jejich produktech. Za nalezení zranitelnosti v hardware, API nebo mobilní aplikaci nabízí odměnu od 150 do 15 tisíc dolarů (dle závažnosti).

Michal Makovec | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (10%)
Celkem 363 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

Dotaz: C++: Error: Multiple definition of / first defined here

31.3.2014 18:54 gld17 | skóre: 4 | blog: GLDiuv_blog
C++: Error: Multiple definition of / first defined here
Přečteno: 169×
Zdravim,

je to mozna blby dotaz, ale ja fakt nevim co delam spatne. Zkousel jsem hledat reseni na internetu ale podle me mam vsechno jak ma byt.

mam hlavicku gyro.h, kde si definuji strukturu GyroStruct {...} gyroVals. Tuto hlavicku includuji do gyro.cpp a do main.cpp, kde pouzivam promennou gyroVals - cili je to v podstate globalni promenna.

Pri sestaveni v Qt mi to napise chybu: multiple definition of GyroModule::gyroVals (file not found) / first defined here (file not found)

V hlavickach pouzivam #ifndef GYRO_H #define GYRO_H #endif a take pouzivam namespacy.

Dekuji moc za pomoc

Řešení dotazu:


Odpovědi

31.3.2014 19:15 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
No tak jsem si tenhle prikladu delal v cistem projektu v Qt a cumim na to jak puk, fakt to nejde. Ja jako v C++ moc neumim, akorat jsem se na stredni ucil v C.

Kdyz si vezmu, ze C++ podporuje proceduralni programovani, tak jaky ma pak smysl, ze kdyz si v hlavicce nadefinuju a nadeklaruju typ, nemuzu k nemu pak pristoupit z vicero mist naincludovanim hlavicky? To mi pripomina nejake zapouzdreni ktere znam z OOP.

Please explain :-)
31.3.2014 19:22 MadCatX
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Můžete postnout nějaký minimální příkad toho, co se snažíte udělat? Jinak bacha, struct v C++ je něco jiného než v C. V C++ se structem rozumí třída, která má všechny členy implicitně public.
31.3.2014 19:28 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
//main.cpp #include "foo.h"

int main(int argc, char *argv[]) { struktura.i = 5; func(); return 0; }

//foo.h

#ifndef FOO_H #define FOO_H

struct myStruct { int i; } struktura; void func(); #endif

//foo.cpp

#include "foo.h:"

void func() { struktura.i = 4; }

Vede k chybe Multiple definition of struktura.

Uz jsem prisel na to, ze problem je proste ve vicenasobne definici (necekane :D ) promenne "struktura", kdyz si nainkluduju hlavicku i do main.cpp... jenomze co s tim? Co kdyz budu chtit pouzivat globalni promenne, jako jsem byl zvykly treba v Cecku?
31.3.2014 19:34 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Rikate ze structura je jako trida s public prvky v C++. A ja jsem cetl, ze prace se strukturami ma vetsi vykon nez s tridami. Delam tu aplikaci pro Raspberry Pi a chci at je to rychle, kdyz uz to delam v C++. Struktury vnimam jako zprehledneni, nez kdybych pouzival nejake pole. Tak co ted s tim, to muzu rovnou pouzit tridy? :/
Josef Kufner avatar 31.3.2014 19:44 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Struktura a třída je v C++ skoro totéž. Zpomalení přichází až s virtuálními metodami. Ale i to je prakticky zanedbatelné a velmi dobře zoptimalizované. Jakýkoliv dnešní hardware je dost rychlý na to, abys toto nemusel v C++ řešit a mohl raději psát dobře čitelný kód. Navíc dnešní překladače už toho zvládnou optimalizovat docela hodně a kolikrát jim tyto pseudooptimalizace jen hází klacky pod nohy.
Hello world ! Segmentation fault (core dumped)
31.3.2014 19:51 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Takze muzu pouzivat normal OOP s metodami a bude to stejne rychle, jako kdybych pouzival proceduralni programovani? Uz bych si rad udelal jasno v tom, jestli je proceduralni programovani vykonejsi.
Josef Kufner avatar 31.3.2014 20:54 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Režii objektů považuj s klidem za zanedbatelnou. Až budeš dělat věci, kde na tom bude záležet, tak budeš vědět.

Je lepší napsat slušný kód, který je o něco pomalejší, než neudržovatelnou zrůdu. Mnohem více výkonu se vyplýtvá na spoustě jiných věcí a pokud chceš rychlý kód, nauč se používat profiler. Ten ti řekne, kde to drhne a nebudeš se zdržovat blbostma.
Hello world ! Segmentation fault (core dumped)
Řešení 1× (gld17 (tazatel))
Josef Kufner avatar 31.3.2014 19:26 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Protože v C++ se rozlišuje mezi deklarací a definicí. Proměnná může být deklarována vícekrát, ale definována jen jednou.

Tedy v hlavičkovém souboru ponech
GyroStruct {...}; // deklarace typu
a přidej
extern GyroStruct gyroVals; // deklarace, že symbol gyroVals existuje
V právě jednom .cc pak budeš mít
GyroStruct gyroVals; // definice, co symbol gyroVals znamená
Nicméně tento přístup je z pohledu návrhu aplikace špatně a měl bys to udělat jinak.
Hello world ! Segmentation fault (core dumped)
31.3.2014 19:55 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
rozumim, to funguje. Dependency injection je v podstate to, co do nas vtloukali na stredni, ze nemame pouzivat globalni promenne ale delat navratove hodnoty u funkci? Ale kdyz vidim ted ty zdrojaky psane v Cecku, tak tam se tim vyvojari ocividne moc neridi a me to prijde prakticke i pro moji potrebu nyni u me aplikace, me by to taky zprehlednilo kod :D
Josef Kufner avatar 31.3.2014 21:05 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Dependency injection je o tom, že se používající kód nestará o původ toho, co používá. Jen do sebe nechá nacpat vše, co potřebuje.

Pokud uděláš správně zapouzdření jednotlivých částí programu (objektů), bude to ještě přehlednější než to máš teď.

Polož si jednoduchou otázku: Co musím udělat, abych tuto komponentu mohl mít ve dvou instancích?

Pokud je odpověď složitější než "Zavolám factory/konstruktor a napojím těhle pár propojek.", tak to máš blbě.
Hello world ! Segmentation fault (core dumped)
31.3.2014 20:19 axel
Rozbalit Rozbalit vše Re: C++: Error: Multiple definition of / first defined here
Ja jako v C++ moc neumim, akorat jsem se na stredni ucil v C.
To je ovsem problem, na ktery budes narazet neustale. Doporucuju zacit knizkou o C a pokracovat knizkou o C++, jinak toho moc nenaprogramujes...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.