0

C++ で記述された options というクラスがあります。ヘッダー情報は次のとおりです。

class Options {
public:
string filename;
string chunkDir;
string outFilename;
string inFilename;
BOOL   compress;
BOOL   extract;
BOOL   print;
BOOL   reconstruct;
int    bits;

Options(string inFilename);
Options(int argc, char** argv);
void unsupported(string s);
void setOptionsFromArguments(int argc, char** argv);
void validateOptionCombination();
int getBits() {
    return bits
};

};

Objective-C セクションでは、次のように Options を初期化します。

Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);

ここで何が起こるかというと、別の C++ メソッドにポインターを渡すと正常に動作しますが、実際に目的の c 側で何かにアクセスしようとすると、たとえば、

opts->bits または opts->getBits()

常に印刷の整数値を返します

Objective-C 側と C++ 側の間でシンボル テーブルが混乱しているように見えますが、これを引き起こすために何ができたのかわかりません。

Mac用にコンパイルすると、コードはObjective-C ++でも機能し、C ++がC ++を呼び出している限り、機能しているように見えるので、メモリが破損しているわけではなく、シンボルテーブルの問題のように見えます。

どんな洞察も大歓迎です。

4

1 に答える 1

1

Objective-C では、BOOLは への typedefsigned charです。純粋な C++ をコンパイルするときに使用する定義は何ですか? C++ コードと Objective-C++ コードはメンバー変数のサイズまたはレイアウトに同意しないため、異なる場合は、あらゆる種類の奇妙さを得ることができます。

于 2010-09-15T22:12:05.503 に答える