错误C4430缺少类型说明符 - 假定为int。注意:C ++不支持default-int Generator

时间:2016-11-14 17:51:35

标签: c++ visual-studio-2015

我遇到以下代码的问题:

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

3 个答案:

答案 0 :(得分:7)

您忘了包含标题

using namespace std;

或忘了写指令

#include <vector>

//...

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

无论如何最好写

<vector>

您必须在所有标题中包含标题std::vector,其中引用了def load237(filename): filename = osp.abspath(filename) old_cwd = os.getcwdu() os.chdir(osp.dirname(filename)) error_message = None try: tar = tarfile.open(filename, "r") tar.extractall() pickle_filename = osp.splitext(filename)[0]+'.pickle' data = cPickle.load(file(pickle_filename)) saved_arrays = {} if load_array is not None: try: saved_arrays = data.pop('__saved_arrays__') for (name, index), fname in saved_arrays.iteritems(): arr = np.load( osp.join(osp.dirname(filename), fname) ) if index is None: data[name] = arr elif isinstance(data[name], dict): data[name][index] = arr else: data[name].insert(index, arr) except KeyError: pass for fname in [pickle_filename]+[fn for fn in saved_arrays.itervalues()]: os.remove(fname) except (EOFError, ValueError), error: error_message = unicode(error) os.chdir(old_cwd) return data, error_message

答案 1 :(得分:1)

vector可能无法使用不完整类型进行实例化。要在标头中添加vector<BagObject> data;,标头也必须包含#include "BagObject.h"

(这是弗拉德回答中建议的更改)

答案 2 :(得分:0)

其他答案是正确的,但很神秘。用简单的英语,你的标题不知道BagObject类。您在BagObject.h中添加了.cpp,但您应该将其添加到.h

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

我猜,你的印象是.cpp必须使用#include,但.h却没有。这是对C ++初学者的常见误解。标题需要包含所有引用的类声明,因此您需要将包含从.cpp提升到.h

将两个提到的包含移动到标题中,它将起作用。