Вопрос о конструкторах переменных: - PullRequest
0 голосов
/ 04 сентября 2010

Если ...

vec3 myVec3 = vec3(1.0, 0.0, 0.5); // myVec3 = {1.0, 0.0, 0.5}
vec3 temp = vec3(myVec3); // temp = myVec3
vec2 myVec2 = vec2(myVec3); // myVec2 = {myVec3.x, myVec3.y}

myVec4 = vec4(myVec2, temp, 0.0); // myVec4 = {myVec2.x, myVec2.y, temp.x, 0.0}

Тогда что означает следующее?

myVec4 = vec4(temp, myVec2, 0.0); // myVec4 =

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

То, как я мог бы понять такие вещи, предполагая, что он компилируется и запускается, это использует отладчик или printf, чтобы увидеть, что вы получаете.

На моем xode 3.2.x - не компилируется. На самом деле vec2 myVec2 = vec2(myVec3); также не компилируется.

Также: в последней строке есть ошибка, которая имеет смысл, когда вы ее читаете.

code.mm: 73: 0 code.mm:73: ошибка: не соответствует функция для вызова 'Vector4<float>::Vector4(vec3&, vec2&, double)

Я всегда находил правила конструктора для C ++ довольно сложными. Пусть компилятор скажет, что это так.

1 голос
/ 06 сентября 2010

Если temp действительно vec3, как вы определили, оба конструктора для myVec4 недопустимы, поскольку оба содержат достаточно компонентов в первых двух аргументах для инициализации всего vec4.

...