Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-03-2011, 23:13   #1
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
[C++] LNK2019 con template class

so già che sto facendo una domanda niubba

avrei necessità di implementare una coda di messaggi da usare con i thread con un modello produttore/consumatore (con un po' di consumatori)

Codice:
#ifndef _SXLMESSAGEQUEUE_H_
#define _SXLMESSAGEQUEUE_H_

#include "Mutex.h"
#include "Semaphore.h"

#include <deque>

namespace sxl
{

	namespace mt
	{

		/*
		 * Message queue per la comunicazione tra
		 * thread
		 */

		template <typename T>
		class MessageQueue
		{

		private:

			Semaphore sem;
			Mutex m;
			std::deque<T> queue;

		public:

			MessageQueue(void);

			T Peek(void);
			void Post(T& x);

		};

	}
}

#endif
Codice:
#include "MessageQueue.h"

using namespace std;
using namespace sxl::mt;

template <typename T>
MessageQueue<T>::MessageQueue(void)
{
	sem(0);
}

template <typename T>
T MessageQueue<T>::Peek(void)
{
	
	// Si blocca in attesa che ci sia un
	// messaggio disponibile
	sem.Wait();

	// Mutex sulla queue
	m.Lock();

	// Prende l'elemento che è da più tempo
	// nella coda
	T x = queue.front();
	queue.pop_front();

	m.Unlock();

	return x;

}

template <typename T>
void MessageQueue<T>::Post(T &x)
{

	// Mutex sulla queue
	m.Lock();

	queue.push_back(x);

	m.Unlock();

	// Segnala che c'è un elemento nella coda
	sem.Signal();

}
Ho scritto questa classe generica che fa parte di una libreria statica che compila correttamente, ma evidentemente c'è un problema di linking, perché quando vado a compilare il progetto in cui uso questa classe ho questo output su visual studio:

Codice:
1>ServerThread.obj : error LNK2019: riferimento al simbolo esterno "public: struct ServerThread::Request __thiscall sxl::mt::MessageQueue<struct ServerThread::Request>::Peek(void)" (?Peek@?$MessageQueue@URequest@ServerThread@@@mt@sxl@@QAE?AURequest@ServerThread@@XZ) non risolto nella funzione "private: static int __cdecl ServerThread::ServerProc(void *)" (?ServerProc@ServerThread@@CAHPAX@Z)
1>ServerThread.obj : error LNK2019: riferimento al simbolo esterno "public: __thiscall sxl::mt::MessageQueue<struct ServerThread::Request>::MessageQueue<struct ServerThread::Request>(void)" (??0?$MessageQueue@URequest@ServerThread@@@mt@sxl@@QAE@XZ) non risolto nella funzione "void __cdecl `dynamic initializer for 'public: static class sxl::mt::MessageQueue<struct ServerThread::Request> ServerThread::mq''(void)" (??__E?mq@ServerThread@@2V?$MessageQueue@URequest@ServerThread@@@mt@sxl@@A@@YAXXZ)
immagino di aver fatto qualche casino con i template, quale? non riesco a capire :<
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2011, 23:47   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Metti tutto il codice della classe template nell'header.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2011, 23:59   #3
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
così va in effetti, ma non c'è un altro modo? sembra un po' una porcata
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2011, 00:04   #4
Duchamp
Member
 
L'Avatar di Duchamp
 
Iscritto dal: Apr 2010
Messaggi: 67
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
così va in effetti, ma non c'è un altro modo? sembra un po' una porcata
All'inizio anch'io ero molto infastidito dalla cosa, ma poi ho dovuto rassegnarmi:

Quote:
Because templates are compiled when required, this forces a restriction for multi-file projects: the implementation (definition) of a template class or function must be in the same file as its declaration. That means that we cannot separate the interface in a separate header file, and that we must include both interface and implementation in any file that uses the templates.
tratto da http://www.cplusplus.com/doc/tutorial/templates/
Duchamp è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
Carburanti, dopo Eni anche IP annuncia u...
HEO Space ha rilasciato una nuova immagi...
La missione Artemis III sarebbe in ritar...
Apple apre Music Hall, una sala concerto...
Adobe arriva su Gemini e Claude: nuove f...
Non solo Fideuram: quasi 2 milioni di it...
I lettori CD di fascia alta potrebbero s...
Tutto il meglio di Amazon weekend: 5 nov...
Proscenic P15+ a 113€ su Amazon: scopa e...
TP-Link Wi-Fi 6 a 59,99€ e Tenda 4G03 Pr...
Un quasi top di gamma a 461€: lo smartph...
Roborock Saros 20 Neo e Flow Complete: 3...
Mac mini si trasforma: chip a 2 nanometr...
Su Amazon c'è un super TV Samsung...
La Cina ha rilasciato un satellite dallo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v