CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z template Class

Problem z template Class

dział ogólny

Problem z template Class

Nowy postprzez Slynx » poniedziałek, 12 września 2011, 23:07

Próbuje zrobić klasę KeyValuePair (http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx)
I do tego dobrze by było wykorzystać template, ale nigdy w sumie z tego na poważnie nie korzystałem, a już na pewno nie pisać całą klasę od zera, więc mam błąd. W dodatku nie przy kompilacji tylko już przy łączeniu, tak więc pewnie gdzieś błędnie przeprowadziłem implementację. Kod jest krótki.
Plik h
KOD cpp:     UKRYJ  
template<typename TKey, typename TValue> public ref class TKeyValue
{
protected:
        TKey _key;
        TValue _value;
public:
        TKeyValue(typename TKey, typename TValue);
        TKeyValue();
        property TKey Key { TKey get(); Void set(TKey value); };
        property TValue Value { TValue get(); Void set(TValue value); };
};
 

Plik .cpp
KOD cpp:     UKRYJ  
#include "StdAfx.h"
#include "TKeyValue.h"

template <typename TKey, typename TValue>
TKeyValue<TKey, TValue>::TKeyValue(typename TKey, typename TValue)
{
        this->_key = TKey;
        this->_value = TValue;
}

template <typename TKey, typename TValue>
TKeyValue<TKey, TValue>::TKeyValue()
{
}

template <typename TKey, typename TValue>
TKey TKeyValue<TKey, TValue>::Key::get()
{
        return this->_key;
};

template <typename TKey, typename TValue>
TValue TKeyValue<TKey, TValue>::Value::get()
{
        return this->_value;
};

template <typename TKey, typename TValue>
Void TKeyValue<TKey, TValue>::Key::set(TKey value)
{
        this->_key = value;
};     

template <typename TKey, typename TValue>
Void TKeyValue<TKey, TValue>::Value::set(TValue value)
{
        this->_value = value;
};     
 

I błąd:

error LNK2020: unresolved token (0600018B) TKeyValue<int,int>::get_Key
// I jeszcze ok. 230 takich samych (dla każdej funkcji włącznie z konstruktorem)


Miło by było gdyby ktoś mi powiedział gdzie robię błąd ;)
---

Już znalazłem, że to jest "błąd" i powinno się używać słówka export, które rzadko które kompilatory wspierają. Jak mój. Alternatywą jest wrzucenie wszystkiego do pliku .h. Wrzuciłem.
KOD cpp:     UKRYJ  
using namespace System;
template<typename TKey, typename TValue> public ref class TKeyValue
{
protected:
        TKey _key;
        TValue _value;
public:
        template <typename TKey, typename TValue>
        TKeyValue(typename TKey, typename TValue)
        {
                this->_key = TKey;
                this->_value = TValue;
        }

        TKeyValue()
        {
        };

        property TKey Key
        {
                TKey get() { return this->_key; };
                Void set( TKey key ) { this->_key = key; }
        };
        property TValue Value
        {
                TValue get() { return this->_value; };
                Void set(TValue value) { this->_value = value; };
        };
};
 

Teraz dostaje błąd

error C2275: 'TKey' : illegal use of this type as an expression



Wiem, co to znaczy, ale nie wiem jak mógłbym to inaczej zapisać.
Może zaraz do tego dojdę sam...

----
No tak, TKey i TValue to moje typy, a nie zmienne;)
Czyli konstruktor nie tak
KOD cpp:     UKRYJ  
template <typename TKey, typename TValue>
TKeyValue(typename TKey, typename TValue)
{
        this->_key = TKey;
        this->_value = TValue;
}
 

tylko tak
KOD cpp:     UKRYJ  
TKeyValue(TKey key, TValue value)
{
        this->_key = key;
        this->_value = value;
}
 


No to wszystko, już sobie poradziłem ; )
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości