在同一个工程内二个不同的CPP文件,INCLUDE同一个H文件,为什么会出错??

时间:2021-10-04 17:08:26
H文件里是个简单的函数声明;
bool Global_Test(){....return true;}

出错信息如下:
bool __cdecl Global_Test(void)" (?Global_Test@@YA_NXZ) already defined in Test_Setting.obj

20 个解决方案

#1


你那个头文件这样处理一下:

#ifndef abcdefg
#define abcdefg

原头文件内容

#endif



这样就可以避免重复定义了

#2


如果调用两次头文件的话,想当于定义两次 Global_Test() 函数,当然要出错了~~~

#3


2ndboy(丢丢)说得对!Think in c++中说过,你可以看看头文件部分!

#4


两次引用的同一个头文件,当然要出错了,加一个欲编译命令吧,#ifndef...

#5


你的两个函数具有同样的定义,肯定会出错。用
#ifndef XXXX_H
#define XXXX_H
    content
#endif



#6


还是不行啊?老样子,我是这样用的:

#ifndef abcdefg
#define abcdefg

bool Global_Test(){
return false;
}

#endif

#7


跟是否加预编译宏没有关系,原因在于
bool Global_Test(){....return true;}
包括了函数定义,该文件被两次包含,必然造成重复定义。应该把声明和定义分开。否则加预编译宏也不能解决问题。

#8


所谓的那个预编译宏不是为了防止同一个头文件多次被不同的cpp包含的,而是为防止同一个头文件多次被同一个cpp包含。

#9


TO:aileen_long(期待2002) 
因为这个函数要在多个CPP文件里被调用,每次都写一遍太麻烦了,怎么才能解决?这样的调用一定要使用类吗?

#10



#ifndef abcdefg
#define abcdefg

后面加上

#pragma once

就行了。

这表明只编译一遍。

#11



#ifndef abcdefg
#define abcdefg

后面加上

#pragma once

就行了。

这表明只编译一遍。
===================================
还是不行,错误依然~~~~~~

#12


我也发现了,我再试试别的方法。

#13


只把那个头文件加到STDAFX。H里也出这样的错误,怎么搞的?救命呀

#14


难道你不能将函数在头文件里声明,在cpp文件里实现。在所有需要该函数的地方包括这个头文件吗?

#15


我也试过在CPP里实现,但是老出global_test.cpp(32) : fatal error C1010: unexpected end of file while looking for precompiled header directive这种错误

#16


在头文件里加一句 #pragma once

#17


punpuny() 说得不错

#18


需要用到该函数的cpp只需要包含到其声明就行了,因为编译器只检查调用到的函数是否被声明过,至于函数体只要存在于当前工程中的任何一个cpp即可,链接器自己会去找的。

#19


我也试过在CPP里实现,但是老出global_test.cpp(32) : fatal error C1010: unexpected end of file while looking for precompiled header directive这种错误

如果是这个错的话,在你的cpp文件中包括stdafx.h头文件。

#20


在.h文件中只要这样定义:
bool Global_Test();

在global_test.cpp(不用什么ifdef等等的东西)中实现该函数:

bool Global_Test()
{
return true;
}

#1


你那个头文件这样处理一下:

#ifndef abcdefg
#define abcdefg

原头文件内容

#endif



这样就可以避免重复定义了

#2


如果调用两次头文件的话,想当于定义两次 Global_Test() 函数,当然要出错了~~~

#3


2ndboy(丢丢)说得对!Think in c++中说过,你可以看看头文件部分!

#4


两次引用的同一个头文件,当然要出错了,加一个欲编译命令吧,#ifndef...

#5


你的两个函数具有同样的定义,肯定会出错。用
#ifndef XXXX_H
#define XXXX_H
    content
#endif



#6


还是不行啊?老样子,我是这样用的:

#ifndef abcdefg
#define abcdefg

bool Global_Test(){
return false;
}

#endif

#7


跟是否加预编译宏没有关系,原因在于
bool Global_Test(){....return true;}
包括了函数定义,该文件被两次包含,必然造成重复定义。应该把声明和定义分开。否则加预编译宏也不能解决问题。

#8


所谓的那个预编译宏不是为了防止同一个头文件多次被不同的cpp包含的,而是为防止同一个头文件多次被同一个cpp包含。

#9


TO:aileen_long(期待2002) 
因为这个函数要在多个CPP文件里被调用,每次都写一遍太麻烦了,怎么才能解决?这样的调用一定要使用类吗?

#10



#ifndef abcdefg
#define abcdefg

后面加上

#pragma once

就行了。

这表明只编译一遍。

#11



#ifndef abcdefg
#define abcdefg

后面加上

#pragma once

就行了。

这表明只编译一遍。
===================================
还是不行,错误依然~~~~~~

#12


我也发现了,我再试试别的方法。

#13


只把那个头文件加到STDAFX。H里也出这样的错误,怎么搞的?救命呀

#14


难道你不能将函数在头文件里声明,在cpp文件里实现。在所有需要该函数的地方包括这个头文件吗?

#15


我也试过在CPP里实现,但是老出global_test.cpp(32) : fatal error C1010: unexpected end of file while looking for precompiled header directive这种错误

#16


在头文件里加一句 #pragma once

#17


punpuny() 说得不错

#18


需要用到该函数的cpp只需要包含到其声明就行了,因为编译器只检查调用到的函数是否被声明过,至于函数体只要存在于当前工程中的任何一个cpp即可,链接器自己会去找的。

#19


我也试过在CPP里实现,但是老出global_test.cpp(32) : fatal error C1010: unexpected end of file while looking for precompiled header directive这种错误

如果是这个错的话,在你的cpp文件中包括stdafx.h头文件。

#20


在.h文件中只要这样定义:
bool Global_Test();

在global_test.cpp(不用什么ifdef等等的东西)中实现该函数:

bool Global_Test()
{
return true;
}

#21