我在Linux上使用GCC 4.8.4进行编译(使用-std = c ++ 0x -fPIC)。
我想使用我定义的数组,但是我收到了这个错误:
class value
{
public:
typedef std::vector<value> array;
typedef std::map<std::string, value> object;
protected:
int type_;
union
{
...
array* array_;
};
typedef value::array array;
}
class ErrorMessage
{
array my_array;
}
编译错误:
/usr/include/c++/4.8/array:81:12: note: template<class _Tp, long unsigned int _Nm> struct std::array
struct array
^
../sources/ErrorMessage.h:290:2: error: ‘array’ does not name a type
array my_array;
有办法解决这个问题吗? (GCC 4.4.7正在运作)
谢谢。
答案 0 :(得分:2)
由于<array>
间接地包含了using namespace std
并且您犯了ErrorMessage
的错误,因此std
中的“array”指的是value
命名空间中的该名称。 />
这是一个类模板,而不是类型 - 因此是错误消息。
在array
之外,其value::array
被称为typedef value::array array
(value
中的array
毫无意义;名称typedef array array;
仍然只存在于类范围内。您也可以编写class ErrorMessage
{
value::array my_array;
};
。)
写
editText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if(event.getRawX() <= (editText.getCompoundDrawables()[DRAWABLE_LEFT].getBounds().width()))
{
// your action here
return true;
}
return false;
}
});
此外,请勿重复使用标准名称。它让每个人都感到困惑。