直到我添加rot()
函数,此代码才能正常工作。是的,它已在头文件中正确声明。我用简单的1.0f值替换了所有方程式,但是发生了相同的错误。这向我暗示了它与声明Matrix2f腐烂有关。 ...有人知道这里的问题吗?
#include "Matrix2f.h"
#include <cmath>
#include <iostream>
#include "Vector2f.h"
Matrix2f::Matrix2f(){
m[0][0]= 1.0f; m[0][1]= 0.0f;
m[1][0]= 0.0f; m[1][1]= 1.0f;
}
Vector2f Matrix2f::rot(float theta, Vector2f vec){
Matrix2f rot;
rot[0][0]= cosf(theta); rot[0][1]= -sinf(theta);
rot[1][0]= sinf(theta); rot[1][1]= cosf(theta);
float tx = ((rot[0][0]*vec.getX())+(rot[0][1]*vec.getY()));
float ty = ((rot[1][0]*vec.getX())+(rot[1][1]*vec.getY()));
return Vector2f(tx, ty);
}
void Matrix2f::printMat(){
std::cout << "| " << m[0][0] << " " << m[0][1] << " |" << std::endl;
std::cout << "| " << m[1][0] << " " << m[1][1] << " |" << std::endl;
}
编译器给出的错误:
|17|error: no match for 'operator[]' in 'rot[0]'|
从第17行到第21行,每行两次给出相同的代码...
任何帮助,不胜感激:)
最佳答案
首先,在“rot”方法中不需要“Matrix2f rot”对象。
您可以将方法更改为:
Vector2f Matrix2f::rot(float theta, Vector2f vec){
float tx = (( cosf(theta) * vec.getX())+( ( -sinf(theta) ) * vec.getY()));
float ty = (( sinf(theta) * vec.getX())+( cosf(theta) * vec.getY()));
return Vector2f(tx, ty);
}
除非您想在“rot”(我假设为“float m [2] [2]”)中重置成员变量“m”,否则
那么您可以使用:
Vector2f Matrix2f::rot(float theta, Vector2f vec){
m[0][0]= cosf(theta); m[0][1]= -sinf(theta);
m[1][0]= sinf(theta); m[1][1]= cosf(theta);
float tx = (( m[0][0] * vec.getX())+( m[0][1] ) * vec.getY()));
float ty = (( m[1][0] * vec.getX())+( m[1][1] * vec.getY()));
return Vector2f(tx, ty);
}
除非您的类(Matrix2f)提供了重写运算符[]的实现,否则不能使用rot [] []