0

在一个名为 的文件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'

我该如何解决?

4

2 回答 2

3

在你的types.h文件中,你应该有这样的东西:

#ifndef TYPES_H
#define TYPES_H

struct ...

#endif

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

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

于 2013-06-12T12:51:49.517 回答
2

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

尝试让文件以该行开头

#pragma once

// your declarations
于 2013-06-12T12:51:52.703 回答