gpt4 book ai didi

C++/名称冲突 : how to exclude a previously defined function

转载 作者:行者123 更新时间:2023-11-30 01:45:27 25 4
gpt4 key购买 nike

我想为我自己定义的数组的新数据类型编写 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 时它起作用了。

最佳答案

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

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

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

关于C++/名称冲突 : how to exclude a previously defined function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com