0

次のコードの問題は知っていますが、解決策についてはわかりません。

テンプレート化されたパラメーターは MOD であるため、関数 'func' では、呼び出しクラスとパラメーターとして渡されたクラス ポインターの両方で MOD が同じ型であることが期待されます。

template <class MOD>
class Test {
    public:
        void func(Test<MOD>* _ptr);
        Test(MOD* _m, int _val);
        int ival;
    private:
        MOD* _mod;
};

template <class MOD>
Test<MOD>::Test(MOD* _m, int _val) {
   _mod = _m;
    ival = _val;
}

template <class MOD> 
void Test<MOD>::func(Test<MOD>* _ptr) {
    if(ival == _ptr->ival)
        std::cout << "Equal values " << std::endl;
    else
        std::cout << "Unequal values " << std::endl;
}

class T1 {
    public:
        Test<T1>* _test1;
        T1() : _test1(NULL) {
            _test1 = new Test<T1>(this, 4); 
        }   
        ~T1() {
            delete _test1; _test1 = NULL;
        }
};

class T2 {
    public:
public:
        Test<T2>* _test2;
        T2() : _test2 (NULL) {
            _test2 = new Test<T2>(this, 5);
        }
        ~T2() {
            delete _test2; _test2 = NULL;
        }
};

int main() {
    T1 t1;
    T2 t2;
    t1._test1->func(t2._test2);
    return 0;
}

どうすればこれを解決できますか?

4

1 に答える 1

0

あなたはこれを必要とします

template <class MOD>
class Test {
    public:
        template<class T> void func(Test<T>* _ptr);

        Test(MOD* _m, int _val);
        int ival;
    private:
        MOD* _mod;
};


template <class MOD> 
template <class T>
void Test<MOD>::func(Test<T>* _ptr) {
    if(ival == _ptr->ival)
        std::cout << "Equal values " << std::endl;
    else
        std::cout << "Unequal values " << std::endl;
}

funcテンプレート クラス内のテンプレート メソッドである必要があります。

于 2013-04-17T06:44:39.043 に答える