错误c4430缺少类型说明符-假定为int.注意:c++不支持default-int生成器

Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Generator

本文关键字:c++ 注意 不支持 default-int int c4430 类型 说明符 错误      更新时间:2023-10-16

我有一个问题与以下代码:

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个错误,但我相信在解决上述问题后它们应该会消失。)

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

忘记添加header

#include <vector>

或者忘记写指令

using namespace std;

无论如何,最好写

#include <vector>
//...
std::vector<BagObject> data;
^^^^^

您必须在所有有std::vector引用的标题中包含标题<vector>

其他答案是正确的,但很神秘。说白了,你的头文件不知道BagObject类。您在.cpp中包含了BagObject.h,但您应该在.h中包含它。

由于同样的原因,它也不知道vector

我猜,你的印象是.cpp必须使用#include,但.h没有。这是c++初学者的一个常见误解。头文件需要包含所有引用的类声明,因此你需要将.cpp中的include提升到.h

将两个提到的include移动到header中,就可以了

vector不能用不完整类型实例化。为了在头文件中有vector<BagObject> data;,头文件中也必须有#include "BagObject.h"

(这是除了在Vlad的答案中建议的更改)

我知道你的问题已经解决了,但在我的情况下,同样的错误是由于循环包含(即我不小心将。h文件包含在其中一个。h文件中)引起的

TextureManager.h(有错误的文件)

// This is TextureManager.h
#pragma once
#include "Game.h"
#include "GameObject.h"
/*
 texture manager class
*/

GameObject.h

// This is GameObject.h
#pragma once
#include "game.h"
#include "TexutureManager.h" // Accidental
/*
*/

我认为这可能值得注意,这也是得到这个错误的方法之一