Creative 'x' has a different language connection

When I create the source, it throws an error: 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
}

I searched Google several times. Some said that it was due to an error, if clangsome of the tricks mentioned when used externin different ways can solve it.

But since I am not such a profession, I tried some of them and could not solve it. Is there a good way to handle this?

It is written in C ++, and the problem occurs when extern MemTrace *globalMemTrace;

+4
source share
3 answers

C ++ offers a link between C ++ and non-C ++ languages ​​in a language binding.

for example

//  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 ++, /, . extern "C".

MemTrace *globalMemTrace; C- C ++,

extern "C" MemTrace *globalMemTrace;
+3

, C.

extern "C" MemTrace *globalMemTrace;
+2

, ​​ C- , , extern "C" ++, extern ​​ ++, , .

:

C ++

+2

All Articles