我想为自己定义的新数据类型Array编写log2()函数。所以它看起来像这个
#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)。
这是错误消息
错误:"Array&"类型的引用的初始化无效来自"double"类型的表达式
解决:当我切换到-std::C++11时,它起作用了。
std::log2
是在C++11中引入的。确保您有一个兼容C++11的编译器(例如,gcc4.8或更高版本,使用-std=c++11
编译),并在函数中使用std::log2
。
如果您不使用std::log2
,那么编译器将找不到标准函数(因为您不是using namespace std;
),并尝试使用您的函数,当然这不是为double
s定义的,并且会出现错误。
我个人的观点是,你应该尽量避免将你的函数命名为标准函数,因为以后可能会出现头痛。
据我所知,内置函数log2
没有在namespace std
中声明。您应该使用以下代码来调用标准的log2
函数:
log2(A[i]);
我希望我的回答能有所帮助。