C++ 使用彼此的成员和错误初始化
我有两个班互相使用 基本上,我有一个helper类和一个head类,我这样称呼它,head使用helper,但是helper从head访问成员 看起来是这样的: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
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],因为它可以作为运行时计算。