Я определил классы 'Outcome' и 'Bin'.
Я пытаюсь передать массив типа Outcome в конструктор Bin, чтобы добавить каждый элемент этого массива в набор Outcome, который является свойством члена класса Bin.
//Bin.h
class Bin {
private:
std::set<Outcome> outcomeset;
public:
Bin();
Bin(Outcome Outcs[], int numberofelements);
Bin(std::set<Outcome> Outcs);
void add(Outcome Outc);
std::string read();
};
//In Bin.cpp
Bin::Bin(Outcome outcs[], int numberofelements) {
int i;
for (i=0;i<(numberofelements-1);i++) {
outcomeset.insert(outcs[i]); //When this LIne is commented out, no compile errors!
}
}
Это приводит к целой путанице ошибок в VS2010, которые ссылаются на файлы библиотеки. Я не смог ничего найти в Интернете или в своем учебнике "Большой C ++". Это абсолютно неправильная реализация такого рода функциональности? Или я что-то упускаю довольно простой?
Для любопытных я реализую это как часть проблемы «Рулетка» из этого бесплатного учебника http://www.itmaybeahack.com/homepage/books/oodesign.html
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: я добавил (довольно длинный) текст ошибки в pastebin, здесь: http://pastebin.com/cqe0KF3K
EDIT2: я реализовал операторы ==! = И <для класса результата, и та же строка все еще не компилируется. Вот реализации </p>
//Outcome.cpp
bool Outcome::operator==(Outcome compoutc) {
if (mEqual(compoutc) == true) {
return true;
}
else {
return false;
}
}
bool Outcome::operator!=(Outcome compoutc) {
if (mEqual(compoutc) == false) {
return true;
}
else {
return false;
}
}
bool Outcome::operator<(Outcome compoutc) {
if (odds < compoutc.odds) {
return true;
}
else {
return false;
}
}
РЕДАКТИРОВАТЬ3: Реализован оператор сравнения с тегами параметров и констант, на которые нет ссылок, и теперь он компилируется!