C++ 为什么我的类不是原型';D #包括 使用名称空间std; 类矩形; int main(){ 矩形房间(5,10); cout

C++ 为什么我的类不是原型';D #包括 使用名称空间std; 类矩形; int main(){ 矩形房间(5,10); cout,c++,class,C++,Class,您需要将类定义放在调用构造函数之前。理想情况下,您应该将其放在头文件中 请删除。您需要在调用构造函数之前放置类定义。理想情况下,您应该将其放置在头文件中 请扔掉这个。这个: #include <iostream> using namespace std; class Rectangle; int main(){ Rectangle myRoom(5,10); cout << myRoom.getHeight() << endl;

您需要将类定义放在调用构造函数之前。理想情况下,您应该将其放在头文件中


请删除。

您需要在调用构造函数之前放置类定义。理想情况下,您应该将其放置在头文件中

请扔掉这个。

这个:

#include <iostream>

using namespace std;

class Rectangle;


int main(){
    Rectangle myRoom(5,10);

    cout << myRoom.getHeight() << endl;
    cout << myRoom.getLength() << endl;

    system("pause");
    return 0;
}

class Rectangle{
    private: 
        int height;
        int length;

    public: 
        Rectangle(int aHeight, int aLength){
            height = aHeight;
            length = aLength;
        }

        int getHeight(){
            return height;
        }

        int getLength(){
            return length;
        }
};
是一个向前声明,它基本上只告诉编译器类
Rectangle
存在。由于编译器不知道关于这个类的任何其他信息,
Rectangle
是一个不完整的类型

在这一行:

class Rectangle;
您正在尝试创建类
Rectangle
的实例,尽管类
Rectangle
之前尚未定义。当然,在这种情况下,转发声明是不够的。类型
Rectangle
仍然不完整

看一看,你会发现有一个很好的解释,说明了不完整类型可以做什么和不能做什么。

这是:

#include <iostream>

using namespace std;

class Rectangle;


int main(){
    Rectangle myRoom(5,10);

    cout << myRoom.getHeight() << endl;
    cout << myRoom.getLength() << endl;

    system("pause");
    return 0;
}

class Rectangle{
    private: 
        int height;
        int length;

    public: 
        Rectangle(int aHeight, int aLength){
            height = aHeight;
            length = aLength;
        }

        int getHeight(){
            return height;
        }

        int getLength(){
            return length;
        }
};
是一个向前声明,它基本上只告诉编译器类
Rectangle
存在。由于编译器不知道关于这个类的任何其他信息,
Rectangle
是一个不完整的类型

在这一行:

class Rectangle;
您正在尝试创建类
Rectangle
的实例,尽管类
Rectangle
之前尚未定义。当然,在这种情况下,转发声明是不够的。类型
Rectangle
仍然不完整

看一看,你会发现有一个很好的解释,说明了不完整类型可以做什么,不能做什么。

在这个术语的任何正式含义中都没有“原型化类”这样的东西

类类型可以声明(或前向声明,有时也指这种声明),这是您的

Rectangle myRoom(5,10);
声明。以这种方式声明的类类型只能以非常有限的方式使用。例如,您可以声明指向
矩形
的指针和引用。但不允许您访问此类类的任何内部,因为编译器对此类声明中的内部一无所知。不允许您定义对象这一类的

可以定义类类型,这就是您使用

class Rectangle;
一旦定义了类(但不是之前),您就可以按任何方式使用它

在代码中,您试图定义一个对象并访问一个已声明但尚未定义的类的成员。这不起作用,也没有办法解决。您必须在代码中交换
main
的定义和
Rectangle
的定义

如果您愿意,您可以在
main
之后定义成员函数(
Rectangle::getHeight
等),但这几乎是
main
之后所能做的所有事情。其他所有事情都应该在
main

之前,在这个术语的任何形式意义上都没有“原型化类”这样的事情

类类型可以声明(或前向声明,有时也指这种声明),这是您的

Rectangle myRoom(5,10);
声明。以这种方式声明的类类型只能以非常有限的方式使用。例如,您可以声明指向
矩形
的指针和引用。但不允许您访问此类类的任何内部,因为编译器对此类声明中的内部一无所知。不允许您定义对象这一类的

可以定义类类型,这就是您使用

class Rectangle;
一旦定义了类(但不是之前),您就可以按任何方式使用它

在代码中,您试图定义一个对象并访问一个已声明但尚未定义的类的成员。这不起作用,也没有办法解决。您必须在代码中交换
main
的定义和
Rectangle
的定义


如果您愿意,您可以在
main
之后定义成员函数(
Rectangle::getHeight
等),但这几乎是
main
之后所能做的一切。其他所有操作都应该在
main
之前进行。首先,将矩形类放在头文件中。其次,不要使用系统(“暂停”)这不是一个好习惯/做法。至于你错在哪里,可能是因为你在main()之后声明了你的类。将它们放在includes之后的顶部。首先,将矩形类放在头文件中。其次,永远不要使用系统(“暂停”)这不是一个好习惯/做法。至于你错在哪里,可能是因为你在main()之后声明了你的类。把它们放在includes之后的顶部