表达式必须有指向对象类型的指针
Expression must have pointer to object type
我正在写一个矩阵程序,我目前正试图乘以一个点和一个矩阵。我的对象(result和P)总是出错"表达式必须有指向对象类型的指针"
//Point Class functions
Point Matrix44::operator*(const Point & P){
Point result;
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 4; k++) {
result.element[i][k] = 0;
for (int j = 0; j < 4; j++) {
result.element[i][k] = element[i][j] * P.element[j][k] + result.element[i][k];
}
}
}
return result;
}
我的两个类是:
//Matrix class
class Point;
class Matrix44 {
private:
double element[4][4];
public:
Matrix44(void);
Matrix44 transpose(void) const;
friend istream& operator>>(istream& s, Matrix44& t);
friend ostream& operator<<(ostream& s, const Matrix44& t);
Matrix44 operator *(Matrix44 b);
Point operator*(const Point & P);
};
//Point class
class Point {
double element[4];
friend class Matrix44;
public:
Point(void) {
element[0] = element[1] = element[2] = 0;
element[3] = 1;
}
Point(double x, double y, double z){
element [0]=x;
element [1]=y;
element [2]=z;
element [3]=1;
}
};
在您的Point
类中,您将element
成员定义为:
double element[4];
这是一个一维数组。然而,在你的函数中,你试图访问它,就好像它是一个两个维数组:
result.element[i][k]
P.element[j][k]
我认为你需要重新思考你的矩阵乘法应该如何工作。
结果。元素是一个一维数组。你用了两个指标。这将无法编译。你应该看看矩阵乘法的定义。
Point Matrix44::operator*(const Point & P){
Point result;
for (int i = 0; i < 4; i++) {
result.element[i] = 0;
for (int j = 0; j < 4; j++) {
result.element[i] += element[i][j] * P.element[j];
}
}
return result;
}
Point::element
为double[4]
。在您的代码中,您有Point result; result.element[i][k] = 0;
。由于element不是二维数组,编译器试图将双精度型转换为数组,以便对其使用[]
,但它不能。我猜这是从Matrix44 Matrix44::operator*(const Matrix44& M)
它也总是有助于告诉我们样例代码中哪一行有问题。
此外,该函数将有不正确的结果,您将result.element[i][k]
设置为零,然后将其设置为4个不同的值。我想你的意思是在最内层循环中添加而不是分配
您正在访问:
result.element[i][k] = element[i][j] * P.element[j][k] + result.element[i][k];
当Point本身只有一级数组时:
double element[4];
如果指向源不可访问的结构体,则可能出现同样的错误,例如
header.h
定义struct myStruct;
source1.c
<标题>包括header.h h1> source2.c <标题>包括header.h h1> 果是这种情况,你会得到这个错误行"uint8_t * ptr2Struct = &structX; 标题>标题>相关文章:
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 了解 Python 中的对象类型
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 基准、值、值类型、对象和对象类型(C++)
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- 在构造过程中更改的对象类型
- 如何构建程序以避免查询对象类型?
- 如何使用Dynamic_cast获得对象类型
- 什么更有效率?在重载函数中或通过在基类函数中检查对象类型来实现
- static_cast实际上不是对象类型的类型是未定义的行为吗?
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 类返回对象类型,但如何返回和检查 null
- 是否可以在辅助功能中概括对象类型
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 当将对象传递给具有参数作为引用类型的函数以及当其类对象类型时,会得到不同的输出
- 如何在运行时指定对象类型
- 我可以获取在重载的新运算符中使用新运算符的对象类型吗?