ubuntuusers.de

std::vector von template klasse

Status: Ungelöst | Ubuntu-Version: Ubuntu 13.04 (Raring Ringtail)
Antworten |

TheIntruder

Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: 205

Hallo Ich habe folgendes template geschrieben

1
template <typename DataVectorType = uint16_t> class DataVector{

Nun moechte ich folgendes versuchen

1
2
template<typename DataVectorType> class DataVector;
typedef std::vector<DataVector<>*> DataVectorList;

DataVectorType sind dabei structs.

Allerdings kommt da folgende Compilerausgabe

1
2
3
4
5
 error: wrong number of template arguments (0, should be 1)
error: provided for ‘template<class DataVectorType> class DataVector’
error: template argument 1 is invalid
error: template argument 2 is invalid
error: invalid type in declaration before ; token

Wie loese ich das Problem?

Panke

Anmeldungsdatum:
14. Oktober 2010

Beiträge: 133

Läuft bei mir tadellos. Der Fehler ist zumindestens nicht im von dir gezeigten Code.

Ältere Übersetzer erkennen << aber nicht als schließende Klammern, sondern als Schiebeoperator. Eventuell deswegen.

1
2
3
4
5
6
#include <vector>
template <typename DVT = int> class DV {};

typedef std::vector<DV<>*> DVV;

int main() {}

TheIntruder

(Themenstarter)
Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: 205

Panke schrieb:

Läuft bei mir tadellos. Der Fehler ist zumindestens nicht im von dir gezeigten Code.

Ältere Übersetzer erkennen << aber nicht als schließende Klammern, sondern als Schiebeoperator. Eventuell deswegen.

1
2
3
4
5
6
#include <vector>
template <typename DVT = int> class DV {};

typedef std::vector<DV<>*> DVV;

int main() {}

Hallo Danke, interessant. Dann schaue ich noch mal. Gruss

TheIntruder

(Themenstarter)
Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: 205

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
void class::feedData(DataVector<RequestType>* dataVector){
	this->dataVectorFromClientFifoMutex.lock();
	this->dataVectorFromClientFifo.push_back(dataVector);
	this->dataVectorFromClientFifoMutex.unlock();
}
void class::feedDataFifo(DataVectorList dataVectorFifo){
	for(unsigned int i = 0; i < dataVectorFifo.size(); i++){
		DataVector<RequestType>* dataVector = dataVectorFifo.at(i);
		this->feedData(dataVector);
	}
}

Also es funktioniert bei mir ncht und hat auch noch Folgefehler:

error: request for member ‘size’ in ‘dataVectorFifo’, which is of non-class type ‘DataVectorList {aka int}’
error: request for member ‘at’ in ‘dataVectorFifo’, which is of non-class type ‘DataVectorList {aka int}’
In member function ‘void AccountManager::clearDataVectorToClientFifo()’:
error: request for member ‘clear’ in ‘((AccountManager*)this)->AccountManager::dataVectorToClientFifo’, which is of non-class type ‘DataVectorList {aka int}’
In member function ‘void AccountManager::feedDataVectorFromClient(DataVector<ClientRequestType>*)’:
error: request for member ‘push_back’ in ‘((AccountManager*)this)->AccountManager::dataVectorFromClientFifo’, which is of non-class type ‘DataVectorList {aka int}’

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

Irgendwo steht bei Dir ein typedef, dass DataVectorList ein int ist, wie mir scheint. Ohne kompletten Quellcode kann ich das aber nur raten. Suchen müsstest Du selbst.

Gruß Dee

Antworten |