C++ 重载数组索引运算符时,表达式必须具有类类型

C++ 重载数组索引运算符时,表达式必须具有类类型,c++,C++,代码如下 错误为表达式的行上必须有类类型: 如果索引>=MELENTS.size 但不在线返回融合[指数] 我不明白为什么,这是个小故障吗 struct Matrix4x4 { float mElements[16]; Matrix4x4() { memset(&this->mElements, 0, sizeof(this->mElements)); this->mElements[0] = 1;

代码如下

错误为表达式的行上必须有类类型: 如果索引>=MELENTS.size

但不在线返回融合[指数]

我不明白为什么,这是个小故障吗

struct Matrix4x4
{
    float mElements[16];

    Matrix4x4()
    {
        memset(&this->mElements, 0, sizeof(this->mElements));
        this->mElements[0] = 1;
        this->mElements[5] = 1;
        this->mElements[10] = 1;
        this->mElements[15] = 1;
    }

    Matrix4x4(const float (&mElements)[16])
    {
        for (int i = 0; i < 16; i++)
            this->mElements[i] = mElements[i];
    }

    float& operator[](int index)
    {
        if (index >= mElements.size()) {
            printf("Array index out of bound, exiting");
            return 0.0F;
        }
        return mElements[index];
    }
}
普通数组没有.size。使用include中的std::SizeElements或include中的std::extent\u v。

普通数组没有.size。使用include中的std::sizeElements或include中的std::extent\u v。

mElements是一个普通的旧数组。它们没有成员函数。因此,编译器不接受mElements.size

随着C++11中std::array的引入,使用普通数组的必要性降低了

替换

float mElements[16];

然后,您可以使用mElements.size。

mElements是一个普通的旧数组。它们没有成员函数。因此,编译器不接受mElements.size

随着C++11中std::array的引入,使用普通数组的必要性降低了

替换

float mElements[16];


那么,你可以使用MySimult.Sig../P>不能在C++中使用MELMENTH.SCASE。普通数组没有任何函数。备选方案:用作您的成员,并进行相应调整。您不能执行sizeofarray/sizeofarray[0]吗?这会让你有足够的时间去尝试once@SyedMohibUddin我认为这不是获得数组长度的最好方法,因为在STL上有一个标准的数组实例化,但是它解决了很多问题。有很多方法,一个是指针HACK和ARR+ 1,ARC不能用C++来做MELMENTHESTENS。普通数组没有任何函数。备选方案:用作您的成员,并进行相应调整。您不能执行sizeofarray/sizeofarray[0]吗?这会让你有足够的时间去尝试once@SyedMohibUddin我认为这不是获得数组长度的最佳方法,因为STL上有一个标准的数组实例化,但它解决了许多情况下的问题。有很多种方法是指针hack*&arr+1-arr