C++/名称冲突:如何排除以前定义的函数
C++/ name conflict: how to exclude a previously defined function
我想为自己定义的新数据类型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]);
我希望我的回答能有所帮助。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++/名称冲突:如何排除以前定义的函数
- 从构建中排除文件(自定义和临时)
- 如何排除故障:未定义的引用“非虚拟思维……”