私はにopencv C++
ライブラリと別のライブラリを使用しようとしています。だから私は、私は.c
でC
ライブラリの.h
CからのC++構造体の初期化
typedef struct {
cv::FileStorage fs;
cv::Mat mat;
} myCPPStruct;
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
myCPPStruct * mycppstruct;
} myCStruct;
void initialize_myCPPStruct(myCPPStruct * mycppstruct);
#ifdef __cplusplus
}
#endif
に追加した.hpp
ファイル構造を定義したmyCStructの初期化子としてやや.cpp
ファイルで定義されているinitialize_myCPPStruct
を呼び出してファイル:
void initialize_myCPPStruct(myCPPStruct * mycppstruct){
mycppstruct = {};
mycppstruct->fs = cv::FileStorage("file.txt", cv::FileStorage::READ);
mycppstruct->mat = cv::Mat(3,3,CV_8UC3);
}
しかし、それはmycppstruct->fs
に値を割り当てようとしたら、それはセグメンテーションフォールトを取得します。私はCにはメモリ割り当てが存在しないためであると仮定し、私はそれがvoid *
としてcv:FileStorage
を解析することができないとしても動作しません
std::memset(stitcher->fs,0,sizeof(cv::FileStorage));
を試してみました。
この機能を使用するには廃止予定のC OpenCVライブラリを使用する必要がありますか?
編集 - 編集の詳細。 C
LIB用
、私は.h
ファイルに__cplusplus
警備員を追加することを確認をしながら、私はg++
を使用してC++
の機能や構造を追加したすべてのファイル.c
(-c
オプションですなわちリンクせずに)再コンパイルします。 C++
コードのない.c
ファイルはすべて、すでに.o
のファイルがgcc
でコンパイルされています。私はg++
でプログラム全体をコンパイルし、関連するライブラリファイルを確実にインクルードします。コンパイラエラーはありません。
? –
@TorbjörnUm、g ++とリンクせずにコンパイルしますか?ここの問題は、コンパイルされていません –
@Torbjörnなぜdownvote?質問はコンパイラの問題ではありません –