#arrays #c #matrix
#массивы #c #матрица
Вопрос:
Я выполняю программу на языке Си для решения системы линейных уравнений методом итераций с фиксированной точкой. И я должен проверить, является ли основная матрица доминирующей по диагонали. Но когда я ввожу abs и элемент матрицы, он говорит
Ошибка (активная) E0308 более одного экземпляра перегруженной функции «abs» соответствует списку аргументов.
- Как я могу это исправить?
//for every row for (i = 0; i lt; size; i ) { //for every column finds the sum of the row double sum = 0; for (j = 0; j lt; size; j ) sum = abs(k[i][j]); sum -= abs(k[i][i]); //check if (abs(k[i][i]) lt; sum) { printf("The matrix is not diagonally dominant."); } }
Комментарии:
1. Что это за тип
k
? Полное сообщение об ошибке должно показать вам кандидатов на функции, вызывающих неоднозначность. Вы действительно используете компилятор C для этой программы на C? В C правильная функция таковаfabs
. Кроме того, в C нет такого понятия, как перегруженные функции.2. С компилятором C у вас может возникнуть неоднозначность с функцией C
abs
, которая работает с целыми числами, и функцией стандартной библиотеки Cstd::abs
, которая имеет перегрузки для целых чисел и типов с плавающей запятой. Если вы смешиваете код C и C и выполняете другие действия, такие как импорт всегоstd
пространства имен, имейте в виду, что это может вызвать проблемы, поразительно похожие на то, что вы описываете.3. Вау, большое спасибо! Я действительно не знал, что фабс прав. Я только что видел функцию abs() в библиотеке lt;math.hgt;. Спасибо вам : )
Ответ №1:
int abs(int)
это для int
.
Используйте double fabs(double)
с double
s.