1

与えられた

#include <locale>

struct Q;
struct R{ void operator()(Q*) { } };
class S : public std::codecvt<char, char, Q*> { } ;

int main() {
    char *p;
    char *q;
    const char *r;
    char *s;
    char *t;
    char *u;
    Q* _q;
    std::use_facet<std::codecvt<char, char, Q*> >(std::locale(std::locale::classic(), new S)).in(_q, p, q, r, s, t, u);
}

リンカはメッセージで死にます

[vtable for std :: codecvt] + 0x50):'std :: codecvt :: do_max_length()const'への未定義の参照、すべてのcodecvtdo_*メンバーに対して繰り返されます。

[vtable for S] + 0x20):'std :: codecvt :: do_out(Q *&、char const *、char const *、char const *&、char *、char *、char *&)const'への未定義の参照、すべてのdo_*メンバー関数に対して繰り返されます。

StateTがそうでない場合std::mbstate_t、コンパイルが機能するためにさらに必要な専門分野はどれですか?

4

1 に答える 1

4

標準で必要とさcodecvtれる 2 つの特殊化 (codecvt<wchar_t, char, mbstat_t>およびcodecvt<char, char, mbstate_t>. エンコーディング変換を行う一般的な方法を持つことは非常に困難です。したがって、独自のテンプレートの特殊化を使用する場合は、すべての関数codecvt(おそらくその基本クラスを含む) を自分で実装する必要があります。

于 2011-11-28T08:12:08.100 に答える