gpt4 book ai didi

c - 在 Borland C++ 3.1 编译器中将 C++ 代码链接到 C

转载 作者:行者123 更新时间:2023-11-30 16:54:17 24 4
gpt4 key购买 nike

我的五年计划的一部分是为一个非常老的游戏(Wolfenstein-3D)编写代码。它需要使用 Borland C++ v3.1 编译器。这是我当前拥有的代码,但它在 Borland 编译器中给出了错误。有什么想法吗?

编译器错误: Error In Compiler

神经元.h

#ifdef __cplusplus // only actually define the class if this is C++
class Neuron {
public:
void foo();
int bar(int x, int y);
};

#else // C doesn't know about classes, just say it's a struct
typedef struct Neuron Neuron;

#endif

// access functions
#ifdef __cplusplus
#define EXPORT_C extern "C"
#else
#define EXPORT_C
#endif

EXPORT_C Neuron* NeuronNew(void);
EXPORT_C void NeuronDelete(Neuron* n);
EXPORT_C void NeuronFoo(Neuron* n);
EXPORT_C int NeuronBar(Neuron* n, int x, int y);

神经元.cpp

#include "NEURON.h"

void Neuron::foo() {
}

int Neuron::bar(int x, int y) {
return x+y;
}

EXPORT_C Neuron* NeuronNew(void) {
return new Neuron();
}

EXPORT_C void NeuronDelete(Neuron* n) {
delete n;
}

EXPORT_C void NeuronFoo(Neuron* n) {
return n->foo();
}

EXPORT_C int NeuronBar(Neuron* n, int x, int y) {
return n->bar(x, y);
}

C 源文件中的用法

#include "NEURON.h"
...

void GameLoop (void)
{
...
Neuron* m = NeuronNew();

NeuronFoo(m);
NeuronDelete(m);

...
}

我的假设是,即使编译器是 C++ 编译器,C++ 代码中也存在编译器无法处理的"new"内容

最佳答案

该错误消息看起来非常类似于其他编译器无法为您的类构建 .cpp 文件时收到的错误消息。它不是提示 NeuronNew,而是提示 _Neuron_new(注意小写“n”和额外的下划线),所以这可能是 Borland 命名构造函数/析构函数的原因?

是否成功编译 .cpp 并编译为 C++?文件后缀映射是否与编译器中的文件后缀映射相关?您是否已在 #ifdef __cplusplus 行中添加了无效代码,以验证它是曾经定义的,而不是总是定义的(如 0 或 1)?您是否对所有包含文件、文件名和 Makefile/项目使用相同的大小写,以便可以找到它们?

哦,你尝试过这样做吗:

typedef struct Neuron* NeuronPtr;

然后在 C 包装器中使用 NeuronPtr 而不是 Neuron* ? C++ 编译器不应该关心(只要您在 __cplusplus 部分中执行 typedef class Neuron* NeuronPtr; ),但这意味着它可能不再尝试解析任何 C 代码中的前向声明结构。

关于c - 在 Borland C++ 3.1 编译器中将 C++ 代码链接到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com