【发布时间】:2012-08-09 03:37:27
【问题描述】:
我有一个 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
我的问题是,foo 出现 multiple definition 错误。怎么样?
我认为问题可能在于,a.h 包含util.h 和b.h,而b.h 又包含util.h,所以我得到了多个def 错误。但这似乎没有意义,因为在util.h我写了#ifndef/#defineguards。
谁能帮帮我,谢谢。
【问题讨论】:
-
多个定义是链接时错误,不应该与您的头文件(有声明,而不是定义)有关。你是怎么编译的?
-
@GordonBailey,我只是按照通常的方式编译它,比如
g++ main.cpp a.cpp b.cpp。 -
如果你想把函数体放在头部,应该是
static void foo() { /* body */ }。 -
以下划线和双下划线开头的符号由实现保留。使用
UTIL_H_之类的东西作为标题保护。
标签: c++ include-guards multiple-definition-error