C2011:'struct'类型重定义和C2027:使用未定义类型

时间:2013-06-12 12:40:39

标签: c++ visual-studio-2010

在名为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'

我该如何解决?

2 个答案:

答案 0 :(得分:3)

types.h文件中,你应该有这样的内容:

#ifndef TYPES_H
#define TYPES_H

struct ...

#endif

这将阻止编译器多次解析包含文件(如果多次包含它),这将导致多个定义。

名称本身并不重要,但您应该确保它是唯一的,并且也不是由其他包含文件定义的。

答案 1 :(得分:2)

您可能需要检查types.h的包含保护。

尝试让文件以行

开头
#pragma once

// your declarations