Итак, у меня есть довольно специфический вопрос, который я нигде не могу найти в интернете.
Я хочу знать, как перегрузить оператор *, чтобы я мог умножить между константой и частью массива.
Мой код, по крайней мере тот, который является относительным, если нужно больше, я могу опубликовать:
licenseCount licenseCount::operator * (const licenseCount& u) const
{
return(this->fxdx*u.fxdx, this->y_array*u.y_array);
}
int licenseCount::calc_vol(double z, char *argv[])
{
int area;
std::string y_array[9];
std::ifstream y_data;
y_data.open( argv[1] );
if(y_data.fail())
{
std::cout << "Can't open file!\n";
exit(1);
}
else
{
for(int i=0; i<=9;i++)
{
int temp;
y_data >> y_array[i];
std::cout << y_array[i] << '\n';
if(i%2 == 0)
{
temp = 2 * y_array[i];
area += fxdx * temp;
}
else if(i = 0)
{
area += fxdx * y_array[i];
}
else
{
temp = 4 * y_array[i];
area += fxdx * temp;
}
std::cout << area;
}
vol = area * depth;
return vol;
}
Мои ошибки:
licenseCount.cpp:62: error: 'const class licenseCount' has no member named 'y_array'
licenseCount.cpp:62: error: 'const class licenseCount' has no member named 'y_array'
licenseCount.cpp: In member function `int licenseCount::calc_vol(double, char**)':
licenseCount.cpp:90: error: no match for 'operator*' in '2 * y_array[i]'
licenseCount.cpp:91: warning: converting to `int' from `double'
licenseCount.cpp:95: error: no match for 'operator*' in '((licenseCount*)this)-licenseCount::fxdx * y_array[i]'
licenseCount.cpp:98: error: no match for 'operator*' in '4 * y_array[i]'
licenseCount.cpp:99: warning: converting to `int' from `double'
licenseCount.cpp:111: error: a function-definition is not allowed here before '{' token
licenseCount.cpp:113: error: expected `}' at end of input
Я искал повсюду в Интернете, возможно, мои поисковые термины были неверными, но я использовал каждую комбинацию слов, о которой мог подумать, чтобы попытаться найти ответ. /вздох
Heads, это домашнее задание, но ваши объяснения / помощь будут с благодарностью!
Похоже, вы пытаетесь получить доступ к y_array, переменной, которая является локальной только для calc_vol, с помощью нотации u.y_array, которая будет ссылаться на y_array, член счетчика лицензий класса, который не является тем же пространством имен, что и y_array Ваш код показывает объявление для.
Вам нужно объявить y_array как std :: string в вашем классе licenseCount (и т. Д.), А не в calc_vol. Ошибочное объявление в calc_vol может маскировать правильное объявление члена класса y_array. Использование позже с y_array [i] было бы неизменным, кроме ссылки на this-> y_array («this->» было бы неявным).
Использование этого в licenseCount является излишним, так как методы класса могут ссылаться на методы экземпляра без «this->».
Других решений пока нет …