Uresolved External při kompilaci třídy s template. – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Uresolved External při kompilaci třídy s template. – C / C++ – Fórum – Programujte.comUresolved External při kompilaci třídy s template. – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
MiCizek0
Stálý člen
29. 8. 2016   #1
-
0
-

Ahoj, po dlouhé době používám template. Když to kompiluju , tak to vyhodí chybu

uresolved external. Jedná se o frontu, kde se na jedné straně prvky vkládají a na druhé se vybírají.

VereQueue.h


#ifndef VEREQUEUE_H
#define VEREQUEUE_H

template<class T>
class VereQueue
{
public:
	~VereQueue()
	{
		while (m_size > 0)
		{
			CellForTemplate *thisCell = m_begin;
			if (m_size > 0)
			{
				m_begin = thisCell->back;
				delete thisCell;

				--m_size;
			}
		}
	}

	T TakeElement();
	void GiveElement(T E);
	int GetSize() { return m_size; }

private:
	struct CellForTemplate
	{
		T element;
		CellForTemplate *front;
		CellForTemplate *back;
	};

	CellForTemplate *m_begin;
	CellForTemplate *m_end;
	int m_size;
};

#endif //VEREQUEUE_H

VereQueue.cpp

#include "stdafx.h"
#include "VereQueue.h"

template<class T>
T VereQueue<T>::TakeElement()
{
	CellForTemplate *thisCell = m_begin;
	T E = thisCell->element;
	if (m_size > 0)
	{
		m_begin = thisCell->back;
		delete thisCell;

		--m_size;
	}

	return E;
}

template<class T>
void VereQueue<T>::GiveElement(T E)
{
	CellForTemplate *newCell = new CellForTemplate;
	newCell->element = E;

	if (m_size > 0)
	{
		m_end->back = newCell;
		m_end = newCell;

	}
	else
	{
		m_begin = newCell;
		m_end = newCell;
	}

	++m_size;
}
Nahlásit jako SPAM
IP: 2a00:1028:83bc:247e:49d2:...–
q
~ Anonymní uživatel
219 příspěvků
29. 8. 2016   #2
-
+1
-
Zajímavé

Podle šablony se vygeneruje kód pro typy, se kterými ji používáš. V C/C++ se jednotlivé soubory kompilují samostatně a překladač nic neví o jiných souborech. Až nakonec se to všechno slinkuje dohromady.

Když máš v souboru jen šablonu pro deklaraci třídy (z toho includu), tak se ti nic víc nevygeneruje. A právě ty chybějící implementace ti nejspíš linker hlásí. Nevím, koule nefunguje.

Bežné řešení je dát všechno do jednoho souboru.

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MiCizek0
Stálý člen
29. 8. 2016   #4
-
0
-
Nahlásit jako SPAM
IP: 2a00:1028:83bc:247e:3c11:...–
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, 11 hostů

Podobná vlákna

Chyba při kompilaci — založil remmidemmi

Chyba při kompilaci — založil Ykita

Problém při kompilaci — založil oxidián

Chyba při kompilaci — založil sXe

Chyba při kompilaci — založil michal

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ý