Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;/名称冲突:如何排除以前定义的函数_C++_C++11_Name Conflict - Fatal编程技术网

C++ C++;/名称冲突:如何排除以前定义的函数

C++ C++;/名称冲突:如何排除以前定义的函数,c++,c++11,name-conflict,C++,C++11,Name Conflict,我想为我自己定义的新数据类型编写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; } 编译器没有解析内部log2是否被支持为内置c函数。为了代码的简单性,我坚持使用相

我想为我自己定义的新数据类型编写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;
}
编译器没有解析内部log2是否被支持为内置c函数。为了代码的简单性,我坚持使用相同的名称(log2)

这是错误消息

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

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

是在C++11中引入的。确保您有符合C++11的编译器(例如,gcc4.8或更高版本,使用
-std=C++11
编译),并在函数中使用
std::log2

如果不使用
std::log2
,编译器将找不到标准函数(因为您没有
使用命名空间std;
),并尝试使用您的函数,当然这不是为
double
定义的,您会得到一个错误

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

是在C++11中引入的。确保您有符合C++11的编译器(例如,gcc4.8或更高版本,使用
-std=C++11
编译),并在函数中使用
std::log2

如果不使用
std::log2
,编译器将找不到标准函数(因为您没有
使用命名空间std;
),并尝试使用您的函数,当然这不是为
double
定义的,您会得到一个错误


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

据我所知,内置函数
log2
未在
命名空间std
中声明。 应使用以下代码调用标准的
log2
函数:

log2(A[i]);

我希望我的回答有帮助。

据我所知,内置函数
log2
没有在
命名空间std
中声明。 应使用以下代码调用标准的
log2
函数:

log2(A[i]);

我希望我的回答能有所帮助。

我不明白问题标题和实际问题是如何结合在一起的。这个问题听起来像是编译器/链接器出错了。请发布该错误消息。以下是错误:>错误:从类型为“double”的表达式初始化类型为“TArray&”的引用无效。如果包含
,则该引用应位于标准命名空间中。它适用于除log2I之外的其他内置函数。我不明白问题标题和实际问题是如何组合在一起的。这个问题听起来像是编译器/链接器出错了。请发布该错误消息。以下是错误:>错误:从类型为“double”的表达式初始化类型为“TArray&”的引用无效。如果包含
,则该引用应位于标准命名空间中。它适用于其他内置项,除了log2打开终端并键入
g++--version
以查看版本。在编译代码时,还要确保使用
-std=c++11
。但是可能有一个bug(我很久以前就报告过了),看看,不确定mingw是否受到了影响。@AliQajar很高兴它起到了作用!打开一个终端,键入
g++--version
查看版本。在编译代码时,还要确保使用
-std=c++11
。但是可能有一个bug(我很久以前就报告过了),看看,不确定mingw是否受到了影响。@AliQajar很高兴它起到了作用!在C++11中,它是在std::下声明的,就像中的其他内置数学函数一样。我添加了C++11开关,它工作了。它可以被称为std::log2(),这正是问题中的代码所做的,但它不起作用。在C++11中,它是在std::下声明的,就像中的其他内置数学函数一样。我添加了C++11开关,它工作了。它可以被称为std::log2(),这正是问题中的代码所做的,但它不起作用。