"X"的声明具有不同的语言联系
declaration of 'x' has a different language linkage
当我构建源代码时,它抛出了一个错误:declaration of 'globalMemTrace' has a different language linkage
#ifdef MEMDEBUG_SIMULATIONS
#include "mem-trace.h"
MemTrace *globalMemTrace;
#endif
// omitted unrelated parts
int Tcl_AppInit(Tcl_Interp *interp)
{
#ifdef MEMDEBUG_SIMULATIONS
extern MemTrace *globalMemTrace;
globalMemTrace = new MemTrace;
#endif
}
我已经用谷歌搜索了好几次。有人说这是由于错误,如果clang
,有些人说以不同的方式使用extern
技巧可能会解决它。
但由于我不是这样的职业,我尝试了其中的一些,但都没能解决。有什么好办法处理吗?
它是用C++写的,问题发生在extern MemTrace *globalMemTrace;
>C++在语言链接的 from 中提供C++和非C++语言之间的链接。
例如
// in C++ program
extern "C" int displayfoo(const char *);
int main() {
return displayfoo("hello");
}
/* in C program */
#include <stdio.h>
extern int displayfoo(const char * str) {
while (*str) {
putchar(*str);
putchar(' ');
++str;
}
putchar('n');
}
您正在使用来自 c++ 代码displayfoo
的 C 函数,因此您需要告诉编译器/链接器它来自不同的语言。这是由外部"C"完成的。
在你的代码中MemTrace *globalMemTrace;
可能以前在 C 代码或 C++ 中的 C 块中声明,所以你需要像
extern "C" MemTrace *globalMemTrace;
这意味着实际变量是用 C 代码声明的,或者至少包装在C++代码的extern "C"
块中,但extern
是用C++代码声明的,因此它不能链接到变量,因为它们存在于不同的语言中。
看看这些文章:
语言联动
链接 C 和 C++ 代码
似乎这个名字已经被声明为具有C语言链接。
extern "C" MemTrace *globalMemTrace;
相关文章:
- 不同语言中相同代码的不同行为
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 我的C++语言蛮力算法有问题
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 为什么编程语言被编译为汇编程序而不是二进制?
- QDirIterator语言 - No hasNext not FilePath reaction
- "C.UTF-8" C++ Windows 上的语言环境?
- 了解 cin.fail() 和 cin.clear语言 - Vector 追加程序
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- "X"的声明具有不同的语言联系