web-dev-qa-db-fra.com

Erreur C4430 spécificateur de type manquant - int supposé. Remarque: C++ ne prend pas en charge default-int Generator.

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;
}
3
HeHacz

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.

6
Vlad from Moscow

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)

1
M.M

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.

0
ajeh