【问题标题】:Class using each other's member and error使用彼此的成员和错误进行类
【发布时间】:2014-07-02 02:25:14
【问题描述】:

我有两个类互相使用。

基本上,我有一个助手类和一个头类(我会这样称呼它,头使用助手,但助手从头访问成员)。

看起来是这样的:

class CHead;

class CHelper
{
    public:
       Chelper() : m_head(0) {}; // default constructor
       CHelper(CHead *head) : m_head(head) {};

       SomeFunction(int id, int type = m_head->m_vTypes[id]); // ERROR HERE

    private:
       CHead *m_head;

       [...]
       bla bla
};


class CHead {
    friend class CHelper; // CHelper can access CHead members

    public:
         CHead(bla bla) : bla bla { bla bla };

         // Member m_helper is constructed at constructor end with smtn
         // like m_helper = CHelper(this);

    private:
         CHelper m_helper;

         [...]
         bla bla
}

好吧,我遇到了两个我不明白的错误:

首先,在尝试执行 m_head->m_vTypes[] 时,我得到:

非静态成员引用必须是相对于特定对象的

第二个,我明白了

标识符“id”未定义

我没有收到这些错误。 第一个应该没有问题通过吧?因为我宣布 CHelper 是 CHead 的朋友。 第二个让我生气。 “id”在第一个参数之前被声明...

有人可以帮忙吗?

【问题讨论】:

    标签: c++ class friend


    【解决方案1】:

    第一个错误是因为默认参数必须在编译时知道,而不是在运行时。因此,您不能将任何类型的非文字表达式作为默认参数。

    第二个错误是因为id没有类型。

    【讨论】:

    • 第二个是重新输入错误。是的,有一个类型,即使有类型,编译器仍然无法计算出来:(
    • 第一个,有解决办法吗?我不确定我是否了解所有内容。仅仅是因为它是一个默认 arg 导致一切都惨遭失败吗?那么我想要实现的目标仍然可以不做吗? (如果我不使用默认参数,我的意思是)
    • 您可以有两个SomeFunction 声明,一个接受两个参数(没有默认值),一个只接受一个参数(id)。然后第二个函数可以调用第一个函数,传递第二个参数m_head->m_vTypes[id],因为它可以作为运行时计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多