【问题标题】:Having trouble with class in c++在 C++ 中遇到类问题
【发布时间】:2021-12-26 23:39:34
【问题描述】:

我显然在这里犯了一个错误,但请帮助我。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    class Item
    {
       int Value;
       int Use_On(Entity Target)
       {
            Target.HP += Value;
        }
    };

    class Entity
    {
        int HP;
        Item Slot;
    };
}

Item 类具有改变 Entity 对象的 HP 值的功能,以及 Entity 类 有一个 Item 对象。这会导致错误,因为尚未声明实体。 我试图制作 Entity 类的原型并在 Item 类之前声明它,但这只会导致另一个错误,即 Entity 是不完整的类型。我该如何解决这个问题? 另外,对不起标题,我的英语不太好:|

【问题讨论】:

    标签: c++ class


    【解决方案1】:

    解决方法是前向声明类,先声明类方法,等所有类都声明完后再定义。

    class Entity;
    
    class Item
    {
        int Value;
        int Use_On(Entity Target);
    };
    
    class Entity
    {
        int HP;
        Item Slot;
    };
    
    int Item::Use_On(Entity Target)
    {
        Target.HP += Value;
    }
    

    有关前向引用的完整讨论和解释,以及声明和定义类方法的替代方法的详细信息,请参阅您的 C++ 教科书。

    这应该可以解决立即的编译错误,但是您需要修复所示代码的多个其他问题。

    1. Use_On 被声明为返回 int,但不返回任何内容。

    2. 在 C++ 中,参数默认按值传递,这意味着 Use_On 最终只修改其本地参数,否则一事无成。无论什么对象被传递到这个类方法中,都保持完全不变。您将需要更改代码以通过指针或引用传递参数。您的 C++ 教科书也将讨论这些主题。

    3. 类应该在全局范围内声明,而不是像 main() 这样的函数内部,其中某些类功能不可用。

    【讨论】:

    • 关于第 3 点,我认为这不是编译器扩展,我认为这只是 local class。在这种情况下,提问者似乎并不真正想使用它,但它不是非标准 C++。
    • Entity 应该通过引用传递。
    • 是的,上面的代码只是一个娱乐,以便任何人都知道问题所在。实际代码是 .h 格式,所以不用担心。在实际代码中,Use_On 返回一个名为 ReturnV 的 int。无论如何,谢谢,你是一个巨大的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多