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 に答える