我如何在 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).
简短摘要:
- 在实例化来自 class 的任何对象之前,始终定义您的 classes。
- 在您使用该头文件内容的块之前包含头文件(坦率的建议总是包含在文件的开头)。
- 某些块中使用的函数必须在块之前声明,并且定义也必须存在于代码中的某处。
我想在 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).
简短摘要:
- 在实例化来自 class 的任何对象之前,始终定义您的 classes。
- 在您使用该头文件内容的块之前包含头文件(坦率的建议总是包含在文件的开头)。
- 某些块中使用的函数必须在块之前声明,并且定义也必须存在于代码中的某处。