我已经看过以下两篇文章对同一主题: Post1Post2。我有一个类似的问题,但不一样(我猜)。所以张贴在这里。对不起,如果它仍然是重复的。包含C头文件包含标准包含(不包括C++ 11)
我有一个C静态库(libComm.a),其中包含以下..
comm.h实现:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
.....
typedef struct _CDef {} CommDef;
而且我得到这个文件的形式提供。无论如何,我无法改变它。除了这个我也有另外一个.cpp的库(libfw.a):
fw.h:
namespace fw { namespace ipc {
class A { ...... };
} }
我的目标是同时使用在我的C库++应用程序:
myCppApp.cpp
#include "fw.h"
extern "C" {
#include "comm.h"
}
namespace chat { namespace comm {
class CppApplication
{
private:
CommDef def;
fw::ipc::A ipc;
};
}
}
当我想要编译,编译器无法找到, “FW :: IPC :: A”。但是,如果我不使用C头和相应的数据类型,一切工作正常。
我意识到这是因为我包含的头文件包含标准C包含文件。所以,我的问题是如何解决这个问题,编译和成功结束链接到lib,符合下列条件:
- 在不改变交付来源
- 不使用C++ 11包括相应的CPP定义因为点1
非常感谢您的时间。
你不应该包括C头文件('stdxxxx.h')在C++程序中。改用它们的C++版本('cstdxxxx')。 – user3528438
这不是我的选择,因为它们仅在C++ 11中定义,并且由于内部性能和其他可移植性问题,我无法使用C++ 11。 – PSN
不一定,'cmath' /'cstring' ...都是可用的,因为C++ 98 – user3528438