Chyba lnk2005 ve Visual studiu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chyba lnk2005 ve Visual studiu – C / C++ – Fórum – Programujte.comChyba lnk2005 ve Visual studiu – C / C++ – Fórum – Programujte.com

 

Lukáš Vámoš
~ Anonymní uživatel
1 příspěvek
6. 2. 2018   #1
-
0
-

Ahoj,

   mám malý projekt (asi 420 řádků): dva soubory .cpp, jeden hlavičkový. A linker mi skoro u všech funkcí vypisuje tento typ chyby, i když rozhodně nic nedefinuji dvakrát:

1>main.obj : error LNK2005: "int __cdecl ht_hash(char * const)" (?ht_hash@@YAHQAD@Z) už je definované v hashtable.obj.

Budu vděčný za každou radu.

Nahlásit jako SPAM
IP: 80.243.109.–
KIIV
~ Moderátor
+43
God of flame
6. 2. 2018   #2
-
0
-

Jde o to, ze se kazdy .cpp soubor zkompiluje do .obj a na zaver se to linker snazi dat dohromady. Pravdepodobne mas neco v .h souboru, co zpusobi, ze se nejaky symbol vyskytne v obou a linker to pak hlasi jako chybu, jelikoz netusi, ktery z nich vybrat (ikdyz jsou treba identicke)

V tomhle pripade bych se zameril na definici funkce ht_hash

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
7. 2. 2018   #3
-
0
-

Střílím od pasu: dochází k opakovanému vložení hlavičkového souboru.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV
~ Moderátor
+43
God of flame
7. 2. 2018   #4
-
0
-

No proste, pokud mas nejaky hlavickovy soubor, tak tam nesmi byt definice funkce, jen prototypy. Nebo staticke funkce nebo inline funkce...

#pragma once

// tato definice zpusobi, ze hlavickovy soubor nemuze byt includovan ve vice jak jednom .cpp souboru
int funkce(int x)
{
	return x*x;
}

// tato definice muze byt includovana ve vice jak jednom .cpp souboru
// modifikator static znamena, ze funkce neni dostupna z jinych kompilacnich jednotek (= .obj souboru)
static int funkce2(int x)
{
	return x*x;
}

// tato definice muze byt includovana ve vice jak jednom .cpp souboru
// modifikator inline u kratkych funkci muze zajistit, ze se vubec nevola jako funkce
inline int funkce3(int x)
{
	return x*x;
}

// toto je deklarace (prototyp funkce), definice musi byt v nekterem z .cpp souboru (ale jen v jedinem!)
int funkce4(int x);

Podobne je to u super globalnich promennych. Tam se zase pouziva klicove slovo extern. Proste v hlavickovem souboru mas  extern int nejakaSuperGlobalniPromenna;  a v jednom z cpp souboru pak mas int nejakaSuperGlobalniPromenna; (jinak by to pro zmenu hlasilo neexistujici symbol)

Nahlásit jako SPAM
IP: 185.163.41.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 31 hostů

Podobná vlákna

Java ve visual studiu — založil deviler

Kódování ve Visual Studiu — založil Anonymní uživatel

TextBox ve visual studiu — založil Jouda

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý