j'ai un problème avec le code suivant:
Generator.h:
#pragma once
class Generator
{
public:
friend class BagObject;
Generator(void);
~Generator(void);
...
void generator(int);
private:
BagObject *object;
vector<BagObject> data; //Error c4430
};
et c'est une erreur:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
il y a 6 autres erreurs, mais je pense qu'elles devraient disparaître après la résolution de ce problème.
c'est le fichier cpp. Je ne pouvais pas le coller la première fois. Generator.cpp
#include "stdafx.h"
#include "Generator.h"
#include "BagObject.h"
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
Generator::Generator(void)
{
srand(time(NULL));
}
Generator::~Generator(void)
{
data.clear();
}
void Generator::generator(int ld)
{
for (int i = 0; i<ld; i++)
{
object = new BagObject(Rand(),Rand(),i);
data.Push_back(object);
}
}
int main()
{
Generator *g = new Generator;
g->generator(10);
return 0;
}
Soit vous avez oublié d'inclure l'en-tête
#include <vector>
ou oublié d'écrire directive
using namespace std;
Dans tous les cas, il vaudrait mieux écrire
#include <vector>
//...
std::vector<BagObject> data;
^^^^^
Vous devez inclure l'en-tête <vector>
dans tous les en-têtes contenant une référence à std::vector
.
vector
ne peut pas être instancié avec un type incomplet. Pour avoir vector<BagObject> data;
dans l'en-tête, l'en-tête doit également avoir #include "BagObject.h"
.
(Cela s'ajoute aux modifications recommandées dans la réponse de Vlad)
Les autres réponses sont correctes, mais cryptiques. En clair, votre en-tête ne connaît pas la classe BagObject
. Vous avez inclus BagObject.h
dans le .cpp
, mais vous auriez dû l'inclure dans le .h
.
Il ne connaît pas non plus vector
pour la même raison.
Je suppose que vous étiez sous l'impression que .cpp
devait utiliser #include
, mais que .h
ne l'a pas fait. C'est un malentendu courant chez les débutants en C++. Les en-têtes doivent inclure toutes les déclarations de classe référencées. Par conséquent, vous devez élever votre include de .cpp
dans votre .h
.
Déplacez les deux inclus mentionnés dans l'en-tête et cela fonctionnera.