我正在尝试编写一些代码来优化我正在编写的程序的一些Open GL函数,不幸的是,我不是C或C ++的老手,但这也是我正在做这个项目的部分原因!
所以我正在创建一个处理3x3矩阵的结构,我按如下方式定义结构:
#ifndef MATRIX3BY3_H
#define MATRIX3BY3_H
struct Matrix3by3
{
float ix, jx, kx;
float iy, jy, ky;
float iz, jz, kz;
Matrix3by3() {}
Matrix3by3(const Matrix3by3 &matrix)
{
ix = matrix.ix;
jx = matrix.jx;
kx = matrix.kx;
iy = matrix.iy;
jy = matrix.jy;
ky = matrix.ky;
iz = matrix.iz;
jz = matrix.jz;
kz = matrix.kz;
}
Matrix3by3 (const float _ix, const float _jx, const float _kx,
const float _iy, const float _jy, const float _ky,
const float _iz, const float _jz, const float _kz) :
ix(_ix), jx(_jx), kx(_kx),
iy(_iy), jy(_jy), ky(_ky),
iy(_iz), jx(_jz), kz(_kz) {}
};
#endif
我得到错误(两次)
预期的说明符限定符列表 在'Matrix3by3'之前
在第一个构造函数的行上。我试图寻找答案,似乎它与编译器有关,不知道这是一种类型。所以我尝试了以下内容,为了简洁起见,我会删除内脏:
typedef struct Matrix3by3 { ... };
struct Matrix3by3 { struct Matrix3by3() {} ... };
struct Matrix3by3 { ... } Matrix3by3;
typdef struct Matrix3by3;
struct Matrix3by3 { ... };
我在针对此错误看到的博客和文章中提出了所有解决方案。我也看到它可能因为循环依赖而出现,但是这个文件没有包括任何其他东西,我甚至删除它们只是为了确定 - 不做任何改变。
我可以在Objective-c类中写这个,我敢肯定,但它可能需要更多的内存和周期,而这正是我想要避免的。我唯一能想到的是我默认设置的一些编译器/项目设置,这使我无法使用这种类型的结构。完全可能,因为我正在学习语言/环境。
任何人都可以提供一些帮助吗?
谢谢!
答案 0 :(得分:4)
C不支持结构体的构造函数或成员函数。您无法将其编译为C或Objective-C。您需要将其编译为C ++或Objective-C ++,此时它几乎会编译:您的第3个构造函数中有错误,因为您尝试初始化成员iy
和jx
多次。一旦你修复了这些拼写错误,它就可以很好地编译。
答案 1 :(得分:1)
typedef struct { ... } Matrix3by3;
应该有效。它将匿名结构声明为类型。
使用class而不是struct:)
答案 2 :(得分:1)
您使用哪种语言/编译器翻译程序?我猜你正在尝试将代码编译为C,而你尝试使用的语言特性是严格遵循C ++的。
答案 3 :(得分:0)
错误“Matrix3by3之前的预期说明符 - 限定符列表”是GCC主义,这意味着令牌“Matrix3by3”未知。当您有一个编译器无法识别的类型时,通常会出现这种情况,原因是您输入错误或忘记了标题。在你的情况下,这是因为“Matrix3by3”类型确实不存在。您有两种选择:
Matrix3by3
并开始使用struct Matrix3by3
,因为这是您定义的实际类型。为你的struct提供一个typedef。它看起来像
typedef struct {
// fields here
} Matrix3by3