繁体   English   中英

我如何在 C++ 中声明 Class

[英]how can i declare a Class in C++

我想在主要方法之前声明 class Person ,但它给了我一个错误,即 class Person未定义

main方法是制作 Object 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();
    }
};

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

如果您将 class 上面的代码删除:

class Person;

那么你就可以做到

Person * person = 0; Person * person = some_other_person;

但是如果没有被告知有构造函数可以链接它,就不可能在这里实际创建一个人,或者使用一个人。

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

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

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

如果在使用 header 文件内容的块之后包含 header 文件,那么您将收到未声明事物的错误。 原因是,当预处理器读取写入#include "header_file.h"的行时,它会立即复制并粘贴 header 文件( header_file.h )的整个代码到您的文件中,如果您在复制粘贴的块之前使用 header 文件的内容,您最终会收到非声明错误(对于需要定义的类)。

简短的摘要:

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

您应该在“主要”function 之前定义您的 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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM