Как уже сказано в комментариях, следующий
void CalcCarbs(unsigned char r, unsigned char b, unsigned char g, float bounciness, unsigned int price, std::string manufacturer)
{
//use values at later state
return;
}
не реализует функцию-член CalcCarbs
из CarbStore
, но вместо этого объявляет и определяет новую свободную функцию с именем CalcCarbs
.Чтобы реализовать функцию-член, вы должны указать компилятору, к какому классу должно принадлежать определение функции.Это делается путем добавления имени класса вместе с двойным двоеточием перед именем функции:
void CarbStore::CalcCarbs(unsigned char r, unsigned char b, unsigned char g, float bounciness, unsigned int price, std::string manufacturer)
{
//use values at later state
return;
}
Подпись также должна совпадать.В CarbStore
вы объявили функцию const
, но вы не сделали этого в реализации.Чтобы исправить это:
void CarbStore::CalcCarbs(unsigned char r, unsigned char b, unsigned char g, float bounciness, unsigned int price, std::string manufacturer) const
{
//use values at later state
return;
}
Однако очень маловероятно, что вам действительно нужна функция-член const
с пустым возвратом, потому что такая функция может иметь длительный эффект только путем изменения глобальных переменных или выполнения ввода-вывода.
Более того, но не связано с этим конкретным сообщением об ошибке:
- В
CarbStore
вы используете std::string
, поэтому вам нужно #include<string>
.С другой стороны, я не вижу в нем std::vector
, поэтому #include<vector>
кажется ненужным (как и все остальные, кроме iostream
в Main.cpp
). return;
в конце тела функции также указывается бессмысленно для функции void
. - Если
main
не использует аргументы командной строки, вы также можете дать ему подпись int main()
.