простой и, я думаю, простой ответ на вопрос (если я сам его еще не получил). Следующие перегруженные функции:
void BR(const bool set) { backwardReaction_[nReac_] = set; }
bool BR(const int reactionNumber) const { return backwardReaction_[reactionNumber]; }
Первая функция - функция установки, а вторая - функция получения. backwardReaction_
относится к типу std::vector<bool>
. Проблема возникает всякий раз, когда я хочу вызвать вторую функцию. Здесь я получаю ошибку компилятора overload function BR(xy) ambigious
.
int main()
.
.
const int i = 3;
bool a = chem.BR(i);
Ошибка компилятора равна:
chemistryTestProg.cpp: In function ‘int main()’:
chemistryTestProg.cpp:74:34: error: call of overloaded ‘BR(const int&)’ is ambiguous
const bool a = chem.BR(i);
^
In file included from ../../src/gcc/lnInclude/chemistryCalc.hpp:38:0,
from ../../src/gcc/lnInclude/chemistry.hpp:38,
from chemistryTestProg.cpp:35:
../../src/gcc/lnInclude/chemistryData.hpp:266:18: note: candidate: void AFC::ChemistryData::BR(bool)
void BR(const bool);
^~
../../src/gcc/lnInclude/chemistryData.hpp:322:22: note: candidate: bool AFC::ChemistryData::BR(int) const
bool BR(const int) const;
^~
Я думаю, что я получаю проблему из-за типов bool
и int
, которые идентичны (true => int(1), false => int(0)
. Поскольку я меняю имя получателя на, например, bool getBR(const int reactionNumber) {...}
, все работает нормально. Поэтому я думаю, что проблема заключается в сходстве обработки bool
и int
в c ++ Я также пробовал различные вызовы, такие как:
const bool a = chem.BR(4)
const bool a = chem.BR(int(5))
const bool a = chem.BR(static_cast<const int>(2))
bool a = chem.BR(...)
Таким образом, я думаю, что это действительно связано с перегрузкой аргументов bool
и int
. Тем не менее, я сделал быстрый поиск и сделал не находите слишком много об этих двух типах перегрузки и возникающих проблемах. Tobi