【发布时间】:2012-08-16 04:37:38
【问题描述】:
为什么不包含const 定义并被多个源文件包含的头文件会导致multiple definition 的编译错误?
const_in_header_file.h
const int num = 5;
//int x; //Error. Multiple defintion if included from multiple source files.
const_in_header_file_func.cpp
#include <iostream>
#include "const_in_header_file.h"
using namespace std;
void func(void)
{
cout << "num in func() = " << num << endl;
}
const_in_header_file_main.cpp
#include <iostream>
#include "const_in_header_file.h"
using namespace std;
extern void func(void);
int main()
{
cout << "num in main() = " << num << endl;
func();
}
【问题讨论】:
-
你能准确地展示声明的样子,包括所有相关类型吗?
-
@GregHewgill 可能根本不需要 :)
-
可能确实如此。显示实际代码总是有帮助的。
-
您需要出示代码才能获得直接答案。在某些情况下和某些范围内,标头中的定义可能合法存在,并且可能对多个 TU 可见,但 C++ 在这方面存在大量变化。在 C++ 中,有多种方法可以解决此问题,但同样 - 这取决于类型和范围。
-
对不起,我的错误。我的意思是
does not。但由于网络中断,在答案涌入之前无法更新