0

私はクラスを持っています:

class Para{
public:
    int wrt, liczbaWystapien;
    Para(){}
    Para(int wrt, int liczbaWystapien){
        this->wrt = wrt;
        this->liczbaWystapien = liczbaWystapien;
    }

次に、他のテンプレートクラスがあり、Para最初の方法はフィールド値にまったく影響しないため、オブジェクトを にキャストする方法がわかりません。

           else if (is_same<T, Para>::value){
        //dynamic_cast<Node<Para>*>(node)->key.wrt++;//this way no error occured but value of field **wrt** stays the same
        node->key.wrt++;//error below

Error 4 error C2039: 'wrt' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'

編集:

Node* paraNode = static_cast*>(ノード); Para para = paraNode->key; para.wrt = para.wrt + 1;

それは与える

エラー 4 エラー C2440: 'static_cast': 'Node *' から 'Node *' に変換できません

4

2 に答える 2

1

キーのタイプが Para であるはずなので、何かがおかしいようです。全部書き出すとどうなる?

Node<Para>* paraNode = dynamic_cast<Node<Para>*>(node);
Para para = paraNode->key;
key.wrt = key.wrt + 1;

その他の提案: なんらかの理由でテンプレート タイプについて確信がある場合は、static_cast<>(または) を使用できます。これは、タイプ階層ツリーを実際に検出してチェックするreinterpret_cast<>よりも高速です。dynamic_cast<>

于 2013-04-30T03:37:14.033 に答える
1

もしあなたがそうするなら Para para = paraNode->key;

キーのコピーを取得します。次に、wrt をインクリメントします。その行に続いてprintfを実行すると、おそらく期待値が得られます。ただし、これを関数内から呼び出すと、元の paraNode は変更されません。

キーを保存してPara* keyからアクセスkey.wrtする必要がありkey->wrt++、関数の後に期待値を取得します。スタック変数とヒープ変数がどのように機能するか、および c++ でコンストラクターをコピーする方法について読むことをお勧めします。

于 2013-04-30T05:11:43.947 に答える