Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用彼此的成员和错误初始化_C++_Class_Friend - Fatal编程技术网

C++ 使用彼此的成员和错误初始化

C++ 使用彼此的成员和错误初始化,c++,class,friend,C++,Class,Friend,我有两个班互相使用 基本上,我有一个helper类和一个head类,我这样称呼它,head使用helper,但是helper从head访问成员 看起来是这样的: class CHead; class CHelper { public: Chelper() : m_head(0) {}; // default constructor CHelper(CHead *head) : m_head(head) {}; SomeFunction(int

我有两个班互相使用

基本上,我有一个helper类和一个head类,我这样称呼它,head使用helper,但是helper从head访问成员

看起来是这样的:

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未定义

我不明白这些错误。 第一个应该可以顺利通过不是吗?自从我宣布切珀是切德的朋友。 第二个让我生气。id在作为第一个参数之前声明


有人可以帮忙吗?

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


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

第二个错误是重新键入错误。是的,有一个类型,但编译器仍然无法计算出它,即使使用了该类型:对于第一个类型,您有解决方案吗?我不确定我什么都懂。只是因为它是一个默认的arg,使得一切都失败得很惨吗?所以我想要达到的目标仍然是可以做到的吗?如果我不使用默认参数,我的意思是你可以有两个函数声明,一个接受两个没有默认值的参数,另一个只接受一个参数id。第二个函数可以调用第一个传递第二个参数m_head->m_vTypes[id],因为它可以作为运行时计算。