我已經看過以下兩篇文章對同一主題: 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