1

我想为我自己定义的新数据类型 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)。

这是错误信息

错误:从“double”类型的表达式中对“Array&”类型的引用进行无效初始化

已解决:当我切换到 -std::C++ 11 时它起作用了。

4

2 回答 2

6

std::log2在 C++11 中引入。确保你有一个兼容 C++11 的编译器(例如 gcc4.8 或更高版本,-std=c++11使用 编译),并std::log2在你的函数中使用。

如果你不使用std::log2,那么编译器找不到标准函数(因为你不是using namespace std;)并尝试使用你的,这当然不是为doubles 定义的,你会得到一个错误。

我个人的意见是,您应该尽量避免将您的函数命名为与标准函数相同,因为以后可能会出现令人头疼的问题。

于 2016-01-05T22:56:47.140 回答
-2

据我所知,内置函数log2未在namespace std. 您应该使用以下代码调用标准log2函数:

log2(A[i]);

我希望我的回答有帮助。

于 2016-01-05T23:14:33.383 回答