结构构造函数中出现“Expected specifier-qualifier-list before”错误

Kev*_*vek 1 c++ iphone struct objective-c

我正在尝试编写一些代码来优化我正在编写的程序的一些 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
Run Code Online (Sandbox Code Playgroud)

我收到错误(两次)

“Matrix3by3”之前应有说明符限定符列表

在第一个构造函数上。我试图四处寻找答案,这似乎与编译器不知道这是一种类型有关。所以我尝试了以下方法,为了简洁起见,我将删除内部结构:

typedef struct Matrix3by3 { ... };
Run Code Online (Sandbox Code Playgroud)
struct Matrix3by3 { struct Matrix3by3() {} ... };
Run Code Online (Sandbox Code Playgroud)
struct Matrix3by3 { ... } Matrix3by3;
Run Code Online (Sandbox Code Playgroud)
typdef struct Matrix3by3;
struct Matrix3by3 { ... };
Run Code Online (Sandbox Code Playgroud)

这些是我在博客和文章中看到的针对此错误建议的所有解决方案。我还看到它可能是由于循环依赖而出现的,但是这个文件没有包含其他任何内容,我什至删除了它们只是为了不时确定 - 没有变化。

我确信我可以在 Objective-C 类中编写这个,但它可能会花费更多的内存和周期,而这正是我想要避免的。我唯一能想到的就是我默认设置的一些编译器/项目设置,这些设置阻止我使用这种类型的结构。完全有可能,因为我正在学习语言/环境。

任何人都可以提供一些帮助吗?

谢谢!

Ada*_*eld 5

C 不支持结构的构造函数或成员函数。您无法将其编译为 C 或 Objective-C。您需要将其编译为 C++ 或 Objective-C++,此时它几乎可以编译:您的第三个构造函数中有一个错误,因为您试图多次初始化成员iy和。jx一旦你修正了这些拼写错误,它就可以正常编译了。