使用memset函数时,对数组的引用是不明确的错误

时间:2015-05-08 20:24:17

标签: c++

我不明白我为什么选择这个"奇怪的"错误。我读过类似的问题,但它没有回答我的问题。如果我在main函数而不是全局范围内定义数组,则没有错误。但是假设我必须在全局范围内定义这个数组。为什么我会接受这个错误? 这是代码:

#include <iostream>
#include <cstring>

using namespace std;

int right[1005];
int main()
{
    memset(right,0,sizeof(right));
return 0;
}

这是错误:

memset2.cpp: In function ‘int main()’:
memset2.cpp:9:9: error: reference to ‘right’ is ambiguous
  memset(right,0,sizeof(right));
     ^
memset2.cpp:6:5: note: candidates are: int right [1005]
 int right[1005];
     ^
In file included from /usr/include/c++/4.8/ios:42:0,
             from /usr/include/c++/4.8/ostream:38,
             from /usr/include/c++/4.8/iostream:39,
             from memset2.cpp:1:
/usr/include/c++/4.8/bits/ios_base.h:924:3: note:                 std::ios_base& std::right(std::ios_base&)
   right(ios_base& __base)
   ^
memset2.cpp:9:24: error: reference to ‘right’ is ambiguous
  memset(right,0,sizeof(right));
                    ^
memset2.cpp:6:5: note: candidates are: int right [1005]
 int right[1005];
     ^
In file included from /usr/include/c++/4.8/ios:42:0,
             from /usr/include/c++/4.8/ostream:38,
             from /usr/include/c++/4.8/iostream:39,
             from memset2.cpp:1:
/usr/include/c++/4.8/bits/ios_base.h:924:3: note:                 std::ios_base& std::right(std::ios_base&)
   right(ios_base& __base)
   ^

2 个答案:

答案 0 :(得分:5)

命名空间std已经命名为right,并且您通过指令

在全局命名空间中包含了std的名称
using namespace std;

为避免歧义,请使用限定名称

memset( ::right, 0, sizeof( ::right ) );

或删除指令,在这种情况下,您可以使用非限定名称right,因为编译器将仅在全局命名空间中搜索名称。

答案 1 :(得分:1)

从您的代码中移除using namespace std ;并在std::

之前的任何标准函数或对象之前