我有一個包含這將在a.h
使用和「b.h」,進一步,a.h
和b.h
將包括彼此以訪問在定義了一些類的功能的util.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
警衛。
任何人都可以給我一個幫助,謝謝。
多個定義是一個鏈接時錯誤,不應該與你的頭文件(它有聲明,而不是定義)有關。你是如何編譯的? – 2012-08-09 03:44:50
@GordonBailey,我只是用通常的方式編譯它,比如'g ++ main.cpp a.cpp b.cpp'。 – Alcott 2012-08-09 03:49:51
如果你想把函數體放在頭文件中,它應該是'static void foo(){/ * body * /}'。 – user2k5 2012-08-09 03:56:31