Я хочу написать функцию log2 () для нового типа данных, который я определил для себя Array. Так это будет выглядеть так
#include <iostream>
#include <cmath>
Array log2(Array& A)
{
Array C=A;
for (int i=0; i<A.size(); i++)
C[i]=log2(A[i]);
return C;
}
несмотря на другие функции, такие как sin, cos и т. д., эта функция (log2) не объявлена в пространстве имен std. так что даже используя следующее
std::log2(A[i])
компилятор не определяет, что внутри log2 предполагается встроенная функция c. Я продолжаю использовать одно и то же имя (log2) для простоты кода.
Это сообщение об ошибке
ошибка: неверная инициализация ссылки типа ‘Массив&’из выражения типа’ double ‘
РЕШЕНО: Это сработало, когда я переключился на -std :: C ++ 11.
std::log2
был введен в C ++ 11. Убедитесь, что у вас есть компилятор, совместимый с C ++ 11 (например, gcc4.8 или новее, скомпилируйте с -std=c++11
) и использовать std::log2
внутри вашей функции.
Если вы не используете std::log2
то компилятор не может найти стандартную функцию (так как вы не using namespace std;
) и пытается использовать ваш, который, конечно, не определен для double
с, и вы получите ошибку.
Мое личное мнение таково, что вы должны стараться не называть свою функцию такой же, как у стандартной, из-за головной боли, которая может появиться позже.
Насколько я знаю, встроенная функция log2
не заявлено в namespace std
,
Вы должны использовать следующий код для вызова стандарта log2
функция:
log2(A[i]);
Я надеюсь, что мой ответ помог.