web-dev-qa-db-ja.com

エラーC4430型指定子がありません-intと見なされます。注:C ++はdefault-intジェネレーターをサポートしていません

次のコードに問題があります:

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

ヘッダーを含めるのを忘れたか

#include <vector>

またはディレクティブを書くのを忘れた

using namespace std;

とにかく書くほうがいい

#include <vector>

//...

std::vector<BagObject> data;
^^^^^

<vector>への参照があるすべてのヘッダーにヘッダーstd::vectorを含める必要があります。

9

vectorは、不完全な型でインスタンス化されない場合があります。 vector<BagObject> data;ヘッダー内、ヘッダーには#include "BagObject.h"

(これはVladの回答で推奨されている変更に追加されます)

2
M.M

他の答えは正しいですが、不可解です。プレーンな英語では、ヘッダーはBagObjectクラスを認識していません。 BagObject.h.cppに含めましたが、.hに含める必要がありました。

また、同じ理由でvectorについても認識しません。

.cpp#includeを使用する必要がありましたが、.hは使用しないという印象を受けていたと思います。これは、C++の初心者によくある誤解です。ヘッダーには、参照されるすべてのクラス宣言を含める必要があるため、インクルードを.cppから.hに昇格させる必要があります。

上記の2つのインクルードをヘッダーに移動すると機能します。

0
ajeh