我如何在 C++ 中声明 Class

how can i declare a Class in C++

我想在 main 方法之前声明 class Person 但它给我一个错误 class Person 未定义

main 方法正在生成对象 Person 但我不知道如何像使用方法那样声明它。

//main Function
int main()
{
    Person person = Person("Majd", 18, 177); //Error "Person class is undefined"
    person.printPerson();
}

class Person
{
    //Private Attributes
    int age;
    int height;
    string name;
    //Public Atributes
public:

    Person(string name, int age, int height) {
        setName(name);
        setAge(age);
        setHeight(height);
    }
    //Getters
    string getName() {
        return name;
    }
    int getAge() {
        return age;
    }
    int getHeight() {
        return height;
    }
    //Setters
    void setName(string name) {
        this->name = name;
    }
    void setAge(int age) {
        this->age = age;
    }
    void setHeight(int height) {
        this->height = height;
    }

    void printPerson() {
        cout << "Name: " << getName() << " Age: " << getAge() << " height: " << getHeight();
    }
};

我这样做是为了学习如何声明 classes。

您应该在“main”函数之前定义 class。

class Person 
{
    //Private Attributes
    int age;
    int height;
    string name;
    //Public Atributes
    public:

        Person(string name, int age, int height) {
            setName(name);
            setAge(age);
            setHeight(height);
        }
        //Getters
        string getName() {
            return name;
        }
        int getAge() {
            return age;
        }
        int getHeight() {
            return height;
        }
        //Setters
        void setName(string name) {
            this->name = name;
        }
        void setAge(int age) {
            this->age = age;
        }
        void setHeight(int height) {
            this->height = height;
        }

        void printPerson() {
            cout << "Name: " << getName() << " Age: " << getAge() << " height: " << getHeight();
        }
};


//main Function
int main()
{
    Person person = Person("Majd", 18, 177); //Error "Person class is undefined"
    person.printPerson();
}

如果你删除 main 上面的 class:

class Person;

那你就可以做到

Person * person = 0; 要么 Person * person = some_other_person;

但没有被告知有构造函数link反对它实际上不可能在这里创建一个人,或使用一个人。

您可以将整个 class 定义移动到文件的顶部,在 main 之上。这将暂时解决它。

好的编程风格是创建一个名为 Person.h 的文件,将 class 放入其中,然后在主 cpp 文件中#include "Person.h"。

class 必须始终在 main 方法或用于实例化对象的方法之前定义。
原因: C++ 从上到下编译(我不是在谈论从左到右或从右到左,这取决于代码行中使用的运算符的关联性),并让编译器存储您想要存在的所有内容class,你必须在使用它之前定义它,但是,等等,这个条件不适用于 class 的函数或方法的使用,即只有声明可以在它使用之前存在,但定义也必须存在(可能在我们使用函数的代码块之后)。
当@Andy Newman 谈到头文件时,我想提一个重要的事实。
关于头文件的一个重要事实:

If you include your header files after the block where you are using the contents of that header file, then you will get error of non-declaration of things. The reason being, when the pre-processor reads a line where #include "header_file.h" is written, then it will without any delay copy and paste whole of the code of the that header file (header_file.h) in your file, and if you are using contents of the header file before the block where they are copy pasted, you will eventually get non-declaration error(for classes it needs definition).

简短摘要:

  1. 在实例化来自 class 的任何对象之前,始终定义您的 classes。
  2. 在您使用该头文件内容的块之前包含头文件(坦率的建议总是包含在文件的开头)。
  3. 某些块中使用的函数必须在块之前声明,并且定义也必须存在于代码中的某处。