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); };
};
{
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;
};
#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 |
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; };
};
};
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;
}
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;
}
{
this->_key = key;
this->_value = value;
}
No to wszystko, już sobie poradziłem ; )



