【问题标题】:class prototypes not being read未读取类原型
【发布时间】:2020-10-21 02:25:56
【问题描述】:

我正在学习 c++。我正在四处尝试新东西,并想在 object 类中使用对象类 sub。但我收到错误消息,说 sub 类的对象未定义。我知道如何解决这个问题我只需将sub 类移到object 上面,这样编译器就知道有一个名为sub 的类。

但是我觉得随着我的代码变得越来越大,这会变得很烦人,所以我尝试像我们对函数原型所做的那样向前声明类。但这不起作用,因为它给了我这个错误 -

'object::thing' uses undefined class 'sub'

这里是代码-

#include <iostream>
#include <vector>

class sub;
class object;

class object
{
private:
    sub thing;
    int ray;
public:
    void set(int n);
    void get() const;
};


class sub
{
public:
    int num;
public:
    void set_num(int n);
    void get_num() const;
};

int main()
{
    object ray;
    ray.set(4);
    ray.get();
}

你们能帮帮我吗? 谢谢

【问题讨论】:

    标签: c++ function class oop methods


    【解决方案1】:

    在 c++ 中使用类型时,至少需要事先声明该类型。

    但是,在某些情况下,还需要定义(完整)类型。

    class A;
    
    class B { 
      A a;    // error, because A needs to be defined   
    }; 
    

    在其他情况下,只需要声明类型(即它可以是不完整的):

    class A;
    
    class B { 
      A *a;    // fine, because A only needs to be declared   
    }; 
    

    如果需要在使用时定义类型(如您的情况),那么您别无选择,只能事先定义它。您可以将定义放在头文件中,但在使用类型之前仍需要包含该文件。

    【讨论】:

    • 谢谢,你能解释一下为什么我在使用A类对象的指针时不需要定义吗?
    • @default-303 指针是固定大小的,因此编译器不需要A 的定义来制作指针。换句话说,它可以是不完整的类型。
    • 非常感谢程序员。您能否再澄清一个疑问 - 如果我将我的类定义移动到另一个文件中并将该文件作为标题包含,那么我不需要关心我如何组织我的类吗??
    • 这取决于。没关系,只要你没有循环依赖。在这种情况下,你应该小心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2014-06-11
    • 2012-07-17
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多