下面是我的代码:
#include <iostream>
#include <memory>
#include <vector>
class var {
private:
double value_;
std::shared_ptr<var> left_;
std::shared_ptr<var> right_;
public:
var(const double& v) : value_(v){};
friend var operator+(const var& l, const var& r) {
var result(l.value_ + r.value_);
left_ = std::make_shared<var>(l.value_);
right_ = std::make_shared<var>(r.value_);
return result;
}
friend std::ostream& operator<<(std::ostream& os, const var& var) {
os << var.value_;
return os;
}
};
int main() { var a(1); }
我得到的错误如下:
test.cpp: In function ‘var operator+(const var&, const var&)’:
test.cpp:17:9: error: invalid use of non-static data member ‘var::r_’
17 | r_.push_back(std::make_shared<var>(l.value_));
| ^~
test.cpp:10:39: note: declared here
10 | std::vector<std::shared_ptr<var>> r_;
| ^~
我很难理解为什么我会得到标题中的错误。
是否有变通方案?
1条答案
按热度按时间xwbd5t1u1#
您的
friend var operator+
不是该类的成员。为了访问数据成员,它应该指定示例。
因此变更:
收件人:
注:
正如@PeteBecker上文评论:在一般的算术情况下,更有效的方法是将
operator+=
实现为成员,然后根据它实现operator+
(创建第一个参数的副本,使用operator+
将第二个参数添加到它并返回它)。在这个特定的例子中,它可能不相关,因为
operator+=
没有多大意义。