在名为types.h
的文件中,我已定义
struct entry {
entry( int a, int t ) : addr(a), time(t) {}
int addr;
int time;
};
在另一个文件中,我想在compress.h
中使用这样的结构:
#include "types.h"
#include <vector>
class Compress {
public:
void insert( int a, int t )
{
theVec.clear();
for (int i = 0; i < 10; ++i)
theVec.push_back( entry(a, t) );
}
private:
std::vector< entry > theVec;
};
在主文件中,我写了
#include "compress.h"
int main()
{
Compress *com = new Compress;
com->insert(10, 100);
return 0;
}
然而,在push_back的行中,我得到了这些错误
error C2011: 'entry' : 'struct' type redefinition
see declaration of 'entry'
error C2027: use of undefined type 'entry'
see declaration of 'entry'
我该如何解决?
答案 0 :(得分:3)
在types.h
文件中,你应该有这样的内容:
#ifndef TYPES_H
#define TYPES_H
struct ...
#endif
这将阻止编译器多次解析包含文件(如果多次包含它),这将导致多个定义。
名称本身并不重要,但您应该确保它是唯一的,并且也不是由其他包含文件定义的。
答案 1 :(得分:2)
您可能需要检查types.h的包含保护。
尝试让文件以行
开头#pragma once
// your declarations