- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的五年计划的一部分是为一个非常老的游戏(Wolfenstein-3D)编写代码。它需要使用 Borland C++ v3.1 编译器。这是我当前拥有的代码,但它在 Borland 编译器中给出了错误。有什么想法吗?
编译器错误:
神经元.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/
回到 Borland C 编译器的基础知识。我不断收到以下消息,这让我发疯,因为我找不到分号应该放在哪里或为什么要分号 >bcc32 -v- -w -O1 oddEven.c Borland C++
我必须使用VCL形式在Delphi中编写程序。正方形,六边形和八边形的三个图形必须移至上边界,然后移至下边界,依此类推。问题是当坐标Y = 0时,当我试图将值放置在条件运算符中以停止移动时,程序冻结了
这里有一个简短的问题: 我正在尝试在 32 位 Windows 7 上使用 Embarcadero C++ Builder XE3 试验内联汇编,特别是为了开始重新自学汇编,以备将来实际应用的可能性。
我找不到与我想问的相匹配的问题。为什么我不能显示 tan (39/180*3.142)?相反,它给了我 0.0000,我需要小数。 void __fastcall TForm1::Button1Cli
随着我对 VS 2010 越来越失望,我试图找到一些替代方案,我正在寻找 Embarcadero 的新版 C++ env。 当 VS 几乎主导市场时,学习新的(我认为不流行的)产品有什么意义吗? 谢谢
我目前正在使用 Codegear RAD Studio 2007。我公司的一位客户决定他会对我们软件的本地化版本感兴趣(俄语 - 我不知道这是否重要,我们将无法使用标准的 Windows 代码页)。作
我现在正在学习,我有这个作业/任务要做: 1) 如果您按下 CTRL + L 键,所有数字符号都应该改变颜色。 2) 如果按 CTRL + S 键,您将获得光标左侧单词的长度。 我找到了这个函数 in
关于下面的C++代码, LengthAlphabeticalSort lengthAlphabeticalSort; outputList.sort(lengthAlphabeticalSort);
我正在使用 Borland c++ 3.1 编译器。我想处理异常,我编写了以下代码: void main (void) { int a = 0; int b = 1; int
我有以下代码: nErgebnisse = new unsigned int*[nInitialVecSize]; for(unsigned int i = 0; i <= nInitialVecSi
这个问题发生在我身上两次。两次都是在使用 Borland C++ 编程时。当我想运行下面的简单代码时:(完全是我写的) int n, total=0, counter=1,average; while
我正在尝试在 Borland 2010 C++ 中创建一些字典。 TDictionary__2 *d = new TDictionary__2(); 我得到错误:[BCC32 错误] Generics
如果是..那么哪个编译器最适合编译它们? 最佳答案 我的同事(不是我自己)在 386 台老式计算机上使用 Borland 编译器。 他经常遇到内存管理问题,必须非常小心地选择在 DOS 中加载哪些驱动
我不确定是否有人使用 Borland c++ 3.1,但我必须这样做。 我有一个程序可以实现简单的线程并通过定时器中断改变这些线程的上下文。 我有一个无限循环和 2 个线程,它们完成各自的工作并在彼此
void empty() { } 将被编译为 push ebp mov ebp, esp ret 如何声明函数使其没有“修饰”代码?只是简单的 ret。如果那不可能,是否可以在 .C 文件中定义完整的
class Register { private: DWORD ax,dx,cx,bx; // POH DWORD bp,sp; DWORD flag,
我支持使用 Borland C++ Builder 5.02(自 1997 年)编写的 C++ 应用程序。 Borland 字符串类上的 find() 方法的行为与我预期的不同: #include
我广泛听说 Borland C++ 5.5 编译器是免费提供的。搜索下载链接通常只会将我带到 embarcadero.com 页面,如果我能弄清楚,我该死的...... 有人知道下载 BCC 5.5
有人知道 Borland C++ rand() 函数的确切实现吗? 我尝试了以下操作,但结果与我使用真正的 TurboC 4.5 得到的结果不一样。当然,我尝试了不同变体的代码,但没有成功。 unsi
我编写了一个程序,使用串行连接与某些硬件进行通信。它以我的方式发送很多十六进制值(传感器读数),并且每隔一段时间它就会发送一个负值。前任。我收到一个十六进制值:FFFFF5D6我必须将其转换为:-26
我是一名优秀的程序员,十分优秀!