我有一个跨平台的C项目,现在我想在我的项目中引入基于C ++的libphonenumber,尽可能少地改变。第一次尝试是使用Visual Studio 2013将它集成到Win32中,但它需要在iOS和Android上运行。
所以我创建了这个标题:
#ifndef LIB_PN_WRAPPER_H
#define LIB_PN_WRAPPER_H
#ifdef __cplusplus
extern "C" {
#endif
char* tu_lpn_normalize(char* number);
#ifdef __cplusplus
}
#endif
#endif //LIB_PN_WRAPPER
和这个cpp:
#include "LibPNWrapper.h"
#include "phonenumbers/phonenumberutil.h"
using i18n::phonenumbers::PhoneNumberUtil;
char* tu_lpn_normalize(char* number) {
PhoneNumberUtil* util = PhoneNumberUtil::GetInstance();
return "hello";
}
但是我遇到了这个链接器错误:
错误LNK2005:已在LibPNWrapper.obj中定义的“private:static unsigned int const i18n :: phonenumbers :: PhoneNumberUtil :: kMinLengthForNsn”(?kMinLengthForNsn @ PhoneNumberUtil @ phonenumbers @ i18n @@ 0IB)
这确实在phonenumberutil.h中声明和定义为:
static const size_t kMinLengthForNsn = 2;
我理解通过将它包含在我的cpp中它再次被声明。但是我试过:
将其包含在头文件中,但之后我不得不将我的文件更改为c ++编译,而我仍然遇到问题。
要在cpp文件中使用命名空间,但它没有帮助。
我不确定它是否因为我混合了C和C ++,或者我在这里缺少其他基本的东西。
欢迎所有想法。