将'float'赋值给'float [16]'的不兼容类型

时间:2011-08-14 23:22:07

标签: c++ arrays struct floating-point

我有结构:

struct mat4 {
    float m[16];
    mat4();
    ...
    float *getFloat();
}

float *mat4::getFloat() {
    return m;
}

现在我想从新创建的矩阵r中使m等于m:

void mat4::rotate(vec3 v) {
    mat4 r, rx, ry, rz;
    ...
    matrix calculations
    ...
    m = *r.getFloat();
}

但是这给了我错误“将'float'赋值给'float [16]'的不兼容类型” 我搜索谷歌并尝试了不同的方法,但到目前为止没有成功。 请告诉我怎么能这样做?

5 个答案:

答案 0 :(得分:5)

getFloat()返回一个指针。 m是一个数组。如果您要将所有返回的内容复制到m,则需要使用std::copystd::memcpy

std::memcpy(m, r.getFloat(), sizeof(m));

如果您打算从getFloat()获得一个浮点数,则可以执行以下操作:

  • m[0] = *r.getFloat();

答案 1 :(得分:2)

std::copy用作:

#include <algorithm>

std::copy(r.m, r.m+16, m);

此外,如果您可以直接使用r.m,为什么还要调用r.getFloat()

答案 2 :(得分:2)

不要使用裸C数组。这是C ++,我们可以做得更好:

#include <tr1/array>  // or <array> if you're in MSVC or GCC

typedef std::tr1::array<float, 16> myfloats;

int main()
{
  myfloats a, b;
  a[0] = /* ... fill the array */
  b = a; // done
}

您也可以将数组放入矩阵结构中:

struct mat4
{
  typedef std::tr1::array<float, 16> myfloats;

  myfloats & data() { return m_data; }

  mat4(); /* ... etc.  ... */

private:
   myfloats m_data;
};

您应该能够直接为彼此分配mat4类型的变量!

答案 3 :(得分:2)

r.getFloat()正在返回指向单个float的指针。将其取消引用以提供单个浮点数,然后将其分配给包含16个浮点数的数组。

假设m包含整个mat4状态,您可以使用内置赋值运算符:

*this = r;

编译器将自动实现struct dump / memcpy来复制所有16个浮点数。

答案 4 :(得分:0)

r.getFloat()返回指向“its”m的指针。无法使用简单赋值复制数组;您必须使用memcpy()memmove()或在数组元素上使用for循环。