заголовочный файл включает цикл -и множественное определение

У меня есть util.h, содержащий функцию, которая будет использоваться в a.hи 'b.h', и более того,a.hи b.hбудут включать друг друга для доступа к некоторым классам, определенным друг в друге.

//util.h

#ifndef _UTIL_H_
#define _UTIL_H_

#include <iostream>

void foo()
{
    std::cout << "foo\n";
}

#endif

//a.h, it has a a.cpp
#ifndef _A_H_
#define _A_H_

#include "util.h"
#include "b.h"

//some classes' definition

#endif

//b.h, it has a b.cpp
#ifndef _B_H_
#define _B_H_

#include "util.h"
#include "a.h"

//some classes' definition

#endif

Моя проблема в том, что я получил ошибку multiple definitionдля foo. Как?

Я подумал, что проблема может заключаться в том, что a.hвключает util.hи b.h, а b.hснова включает util.h, поэтому я получил множественную ошибку определения. Но это не имеет смысла, потому что в util.hя написал #ifndef/#defineгвардейцы.

Кто-нибудь может мне помочь, спасибо.

0
задан Alcott 9 August 2012 в 03:37
поделиться