C++:函数返回静态库中的字符串给出错误:在令牌之前':'预期的"="、""、";"、'asm'或'__attribute__'
C++ : Function return String in Static Library give Error : expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
嗨团队 我倾向于如何在C++中创建静态库,不幸的是,我下面的代码令人头疼,即使在谷歌谷歌几个小时之后,我也找不到问题所在。 遵循很多建议,但没有成功。
ercisstaticlib.h
#ifndef __ERCISSTATICLIB__
#define __ERCISSTATICLIB__
#include <string>
extern "C" std::string GetDatabaseName() ;
#endif // ERCISSTATICLIB_H_INCLUDED
主.cpp
std::string GetDatabaseName()
{
return "Testing";
}
错误信息
=== Build: Debug in ErcisLib (compiler: GNU GCC Compiler) ===
error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===
std::string
是一个类。
extern c
仅支持 C 类型,因为它会导致函数具有 C 签名。
因为 C 中没有类,只有 C++ 中的类。
您应该使用:
extern "C" const char* GetDatabaseName() ;
但需要注意不要返回指向局部变量的指针。
您还有其他选择:您可以放弃extern "C"
并继续使用:
std::string GetDatabaseName();
如果您要将库与C++链接,则没有理由使用extern c
。但是,如果您需要与C链接,则应选择第一个选项。
相关文章:
- C++ variable_name.attribute = x
- 使用C++获取程序的 ASM
- 在 c++ 中使用 x86 DIV 的这个 asm 块有什么用?
- 需要帮助调试"attribute parser"!C++ 来自黑客排名的问题
- g++ -O3 为 loop 创建了奇怪的指令 - 两个具有相同 asm 的版本
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 了解 C/C++ 中 Windows / MSVC 的一些反调试内联 asm
- 尝试使用 x86 asm SSSE3 将大端转换为小端序
- 如何使用"asm volatile"编写 btr 指令
- objdump 不显示机器代码,但显示 ASM
- 未使用的 asm() 在不受支持的体系结构上的行为
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- 为什么发出空asm命令会交换变量
- C++-更改另一个文件的ASM指令
- C++生成器 10.2 基于函数的优化状态"unknown attribute 'optimize' ignored"
- 尝试用纯 c 编程 arduino,得到以下错误:预期的"="、""、";",'asm'或"打印"之前的'__attribute__'|
- C++/ASM:按值传递使用 xmm0,但按引用使用 rdi
- 有人知道可以使用 c++ 以字节为单位编码 asm 字符串的任何东西吗?
- 优化了 VC++ 和 ASM 中的代码