У меня есть 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
гвардейцы.
Кто-нибудь может мне помочь, спасибо.