我想为我自己定义的新数据类型编写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&amp;”类型引用的初始化无效来自'double'类型的表达式
已解决:当我切换到-std :: C ++ 11时,它有效。
答案 0 :(得分:6)
std::log2
是在C ++ 11中引入的。确保您具有符合C ++ 11的编译器(例如gcc4.8或更高版本,使用-std=c++11
进行编译),并在函数内使用std::log2
。
如果你不使用std::log2
,那么编译器找不到标准函数(因为你不是using namespace std;
)并试图使用你的函数,当然这里没有定义{ {1}} s,你得到一个错误。
我个人的意见是,你应该尽量避免将你的功能命名为标准功能,因为以后会出现头痛。
答案 1 :(得分:-2)
据我所知,内置函数log2
未在namespace std
中声明。
您应该使用以下代码来调用标准log2
函数:
log2(A[i]);
我希望我的回答有所帮助。