我的第一個部分是爲一個非常古老的遊戲(Wolfenstein-3D)編寫代碼。它需要使用Borland C++ v3.1編譯器。這是我目前擁有的代碼,但它在Borland編譯器中給出錯誤。有任何想法嗎?將C++代碼鏈接到Borland C++ 3.1編譯器中的C
錯誤在編譯器:
Neuron.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);
Neuron.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++代碼中有一些編譯器無法處理的'新'
根本沒有編譯任何C++代碼。所以它不是一個C++編譯器。你只給了一個typedef,struct必須被定義在某處*。我們看不到它,編譯器也不能。 –
有趣的是,你如何提出定義結構以使編譯器至少不會產生錯誤。自從我寫了C並嘗試修改typedef struct Neuron {int ans; }神經元;沒有做任何事情。有趣的是代碼在CLion中編譯並運行良好,這就是爲什麼我導致相信潛在的問題是Borland。 – Gary
確保在C文件中使用'NeuronNew'而不是'_Neuron_new'。 –