C++/名称冲突:如何排除先前定义的函数
C++/ name conflict: how to exclude a previously defined function
我想为我自己定义的数组的新数据类型编写 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
s,你得到一个错误。
我个人的意见是,您应该尽量避免将您的函数命名为与标准函数相同的名称,因为以后可能会出现令人头疼的问题。
据我所知,built-in函数log2
没有在namespace std
中声明。
您应该使用以下代码调用标准 log2
函数:
log2(A[i]);
希望我的回答对您有所帮助。
我想为我自己定义的数组的新数据类型编写 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
s,你得到一个错误。
我个人的意见是,您应该尽量避免将您的函数命名为与标准函数相同的名称,因为以后可能会出现令人头疼的问题。
据我所知,built-in函数log2
没有在namespace std
中声明。
您应该使用以下代码调用标准 log2
函数:
log2(A[i]);
希望我的回答对您有所帮助。