次のコードに問題があります:
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
};
これはエラーです:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
さらに6つのエラーがありますが、この問題を解決するとエラーは消えるはずです。
これはcppファイルです。初めて貼れませんでした。 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;
}
ヘッダーを含めるのを忘れたか
#include <vector>
またはディレクティブを書くのを忘れた
using namespace std;
とにかく書くほうがいい
#include <vector>
//...
std::vector<BagObject> data;
^^^^^
<vector>
への参照があるすべてのヘッダーにヘッダーstd::vector
を含める必要があります。
vector
は、不完全な型でインスタンス化されない場合があります。 vector<BagObject> data;
ヘッダー内、ヘッダーには#include "BagObject.h"
。
(これはVladの回答で推奨されている変更に追加されます)
他の答えは正しいですが、不可解です。プレーンな英語では、ヘッダーはBagObject
クラスを認識していません。 BagObject.h
を.cpp
に含めましたが、.h
に含める必要がありました。
また、同じ理由でvector
についても認識しません。
.cpp
は#include
を使用する必要がありましたが、.h
は使用しないという印象を受けていたと思います。これは、C++の初心者によくある誤解です。ヘッダーには、参照されるすべてのクラス宣言を含める必要があるため、インクルードを.cpp
から.h
に昇格させる必要があります。
上記の2つのインクルードをヘッダーに移動すると機能します。