Я отредактировал это из своего реального кода, чтобы его было немного легче понять.
Базовый класс:
class MWTypes
{
public:
virtual long get() { return (0); }
};
Производный класс: (Там собираютсябыть другими классами, такими как char, double и т. д. и т. д.)
class TypeLong : public MWTypes
{
public:
TypeLong(long& ref) : m_long(ref) {}
~TypeLong();
long get() { return m_long; }
private:
long& m_long;
};
и класс хранения:
class RowSet
{
public:
void addElememnt(MWTypes elem);
MWTypes getElement();
std::vector<MWTypes> getVector() { return m_row; }
private:
std::vector<MWTypes> m_row;
};
Как он называется:
for (i = 0; i < NumCols; i++) // NumCols is 3 on this instance
{
switch(CTypeArray[i]) // this is an int which identifies the type
{
case SQL_INTEGER:
{
long _long = 0;
TypeLong longObj(_long);
MWTypes *ptr = &longObj;
// some SQL code goes here that changes the value of _long,
// there is no need to include it, so this will do.
_long++;
// I now want to save the data in a vector to be returned to the user.
rowSet.addElememnt(*ptr);
///////////////////////////////////////////////
// some code happens here that is irrelevant //
///////////////////////////////////////////////
// I now want to return the typr I have saved in the vector,
// I THINK I am doing this right?
MWTypes returned = rowSet.getElement();
// lastly I want to get the value in the returned type
long foo = returned.get();
///////////////////////////////////////////////
// some code happens here that is irrelevant //
///////////////////////////////////////////////
Я думаю, что я на правильных линиях здесь.Значение 'foo' всегда равно 0. У меня такое ощущение, что это может быть способ сохранения Im в векторе или базовая виртуальная функция, поскольку она всегда возвращает 0.
Если я удаляювозвращаясь в базовый класс, я получаю ошибки LNK2001.