C++中‘invalid use of non-static data member’错误原因及解决方法
错误原因与解决办法
错误原因
- 你在友元函数
operator+里直接写left_和right_,但这两个是var类的非静态成员变量,这类变量属于具体的对象实例,而非类本身。友元函数虽能访问类的私有成员,但必须明确指定操作的对象——你现在未绑定具体对象,编译器无法识别要操作哪个var实例的成员,因此报错。(注:你提供的错误信息提到r_,推测是代码编写过程中的笔误,但核心问题一致:访问非静态成员时未指定所属对象)
解决办法
- 你实际要给新创建的
result对象的left_和right_赋值,因此必须加上对象前缀result.,修改后的operator+函数如下:
friend var operator+(const var& l, const var& r) { var result(l.value_ + r.value_); result.left_ = std::make_shared<var>(l.value_); result.right_ = std::make_shared<var>(r.value_); return result; }
这样编译器就能明确你要操作的是result这个var实例的成员变量,代码可正常编译。
内容的提问来源于stack exchange,提问作者HMPtwo
相关产品推荐
相关产品推荐

