Re: Проблема с добавлением объекта в множество(set)
Добавлено: 16 ноя 2013, 00:35
О, спасибо!)
Все заработало когда в ф-цию add сделал как у Вас:
template <class T> void add()
{
getSet<T>().insert(T());
}
Я только не понял, почему нельзя было объявить объект выше и передать его в insert как было раньше, в нешаблонных ф-циях это работало.
И еще не получилось вынести частные геттеры за класс, выдает такую ошибку на каждый сэт:
error LNK2005: "private: class std::set<class AutoConfiguration,struct std::less<class AutoConfiguration>,class std::allocator<class AutoConfiguration> > & __thiscall AutoShop::getSet<class AutoConfiguration>(void)" (??$getSet@VAutoConfiguration@@@AutoShop@@AAEAAV?$set@VAutoConfiguration@@U?$less@VAutoConfiguration@@@std@@V?$allocator@VAutoConfiguration@@@3@@std@@XZ) already defined in autoShop.obj
Оставил так:
class AutoShop
{
string name;
string address;
int amountCarsSold;
double gainsMoney;
set<Manager> managerSet;
set<Client> clientSet;
set<AutoConfiguration> autoConfigurationSet;
template <class T> set<T>& getSet();
template<> set<Manager>& getSet<Manager>()
{
return managerSet;
}
template<> set<Client>& getSet<Client>()
{
return clientSet;
}
template<> set<AutoConfiguration>& getSet<AutoConfiguration>()
{
return autoConfigurationSet;
}
public:
AutoShop(string _name, string _address);
template <class T> void add()
{
getSet<T>().insert(T());
}
void showAll();
template <class T> void show()
{
set<T>::iterator iter;
iter=getSet<T>().begin();
while(iter!=getSet<T>().end())
{
(*iter).show();
iter++;
}
}
#pragma once везде прописано... В чем ошибка?
Все заработало когда в ф-цию add сделал как у Вас:
template <class T> void add()
{
getSet<T>().insert(T());
}
Я только не понял, почему нельзя было объявить объект выше и передать его в insert как было раньше, в нешаблонных ф-циях это работало.
И еще не получилось вынести частные геттеры за класс, выдает такую ошибку на каждый сэт:
error LNK2005: "private: class std::set<class AutoConfiguration,struct std::less<class AutoConfiguration>,class std::allocator<class AutoConfiguration> > & __thiscall AutoShop::getSet<class AutoConfiguration>(void)" (??$getSet@VAutoConfiguration@@@AutoShop@@AAEAAV?$set@VAutoConfiguration@@U?$less@VAutoConfiguration@@@std@@V?$allocator@VAutoConfiguration@@@3@@std@@XZ) already defined in autoShop.obj
Оставил так:
class AutoShop
{
string name;
string address;
int amountCarsSold;
double gainsMoney;
set<Manager> managerSet;
set<Client> clientSet;
set<AutoConfiguration> autoConfigurationSet;
template <class T> set<T>& getSet();
template<> set<Manager>& getSet<Manager>()
{
return managerSet;
}
template<> set<Client>& getSet<Client>()
{
return clientSet;
}
template<> set<AutoConfiguration>& getSet<AutoConfiguration>()
{
return autoConfigurationSet;
}
public:
AutoShop(string _name, string _address);
template <class T> void add()
{
getSet<T>().insert(T());
}
void showAll();
template <class T> void show()
{
set<T>::iterator iter;
iter=getSet<T>().begin();
while(iter!=getSet<T>().end())
{
(*iter).show();
iter++;
}
}
#pragma once везде прописано... В чем ошибка?