全局函数的声明和定义
来源:互联网 发布:ubuntu安装时怎么分区 编辑:程序博客网 时间:2024/05/19 02:30
我在一个CPlusTestSuite.h文件中定义了一个全局函数
namespace PlusTest
{
std::string plusSuiteName()
{
return "PlusTest";
}
}
然后工程中有两个文件分别包含了(直接或间接)这个头文件。就会出现重定义的错误:
1>Linking...
1>BB.obj : error LNK2005: "void __cdecl ArraySet(double *,int,double)" (?ArraySet@@YAXPANHN@Z) already defined in AA.obj
然后,我把函数体的定义放到了CPlusTestSuite.cpp中,代码如下:
CPlusTestSuite.h:
namespace PlusTest
{
std::string plusSuiteName();
}
///////////////////////////////////////////////////////////////////////////
CPlusTestSuite.cpp:
std::string plusSuiteName()
{
return "PlusTest";
}
结果又会出现下面的错误:
1>BB.obj : error LNK2019: error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl PlusTest::plusSuiteName(void)" (?plusSuiteName@PlusTest@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function "void __cdecl `dynamic initializer for 'autoRegisterRegistry__8''(void)" (??__EautoRegisterRegistry__8@@YAXXZ)
思考了半天,有三种种解决方法:
1.去掉.h中的namespace PlusTest{};
2.在.cpp中加上namespace PlusTest{};
3.不把函数体的实现放到.cpp中,而是改成内联函数或者是静态函数;代码如下:
CPlusTestSuite.h:
namespace PlusTest
{
inline std::string plusSuiteName() //inline=>static 也可以
{
return "PlusTest";
}
}
- 全局函数的声明和定义
- 函数的声明和定义
- 函数的声明和定义
- 函数的声明和定义
- 函数的声明和定义
- 函数的声明和定义
- 函数的声明和定义
- 关于全局变量和全局函数的声明
- 全局静态函数的定义和实现
- 变量和函数的定义和声明
- 函数声明和定义
- 内联函数的声明和定义
- 内联函数的声明和定义位置
- 变量,函数的定义和声明
- c_函数的声明和定义
- 内联函数的声明和定义
- 函数的定义、声明、初始化和赋值
- 函数的声明、定义和调用
- ASP.NET性能优化之局部缓存
- DF
- DataGrid数据绑定及学习笔记
- Fusioncharts 参数大全
- DDDD
- 全局函数的声明和定义
- 麦当劳传奇故事
- 50个必备的实用jQuery代码段
- mapxtreme 7.0下载地址
- 在Eclipse中如何对整个项目重新编译
- Linux下spi驱动开发
- 2011年度100个移动开发精品资料荟萃【珍藏级不容错过!】
- JAVA 地图编辑器V0.1
- oracle 数据库日期比较