我遇到以下代码的问题:
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;
}
答案 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
。
将两个提到的包含移动到标题中,它将起作用。