C++ - 试图重载“<<”运算符
C++ - trying to overload "<<" operator
我正在尝试重载“<<”运算符以调用 2 个方法,但编译器给我一个错误:
invalid initialization of non-const reference of type 'std::ostream&'
{aka 'std::basic_ostream<char>&' from an rvalue of type 'void'
return v.init();
这是我的 class 定义:
template<class T>
class Vector
{
private:
std::vector<T> _Vec;
public:
void fillVector();
void printElements();
void init() { fillVector(); printElements(); }
friend std::ostream& operator<<(std::ostream& os, Vector& v) {
return v.init();
};
我该如何解决?
你做错了。
此模板具有误导性。名字好难听
这些额外的方法:fillVector
、printElements
、init
令人困惑(它们到底应该做什么?)。
很可能 printElements
缺少 std::ostream& stream
参数(可能还有 return 类型)。
您没有描述您要实现的功能类型。很可能这就是您需要的:
template<class T>
class PrintContainer
{
public:
PrintContainer(const T& container)
: mContainer { container }
{}
std::ostream& printTo(std::ostream& stream) const {
// or whatever you need here
for (const auto& x : mContainer) {
stream << x << ", ";
}
return stream;
}
private:
const T& mContainer;
};
template<class T>
std::ostream& operator<<(std::ostream& os, const PrintContainer<T>& p) {
return p.printTo(os);
}
我正在尝试重载“<<”运算符以调用 2 个方法,但编译器给我一个错误:
invalid initialization of non-const reference of type 'std::ostream&'
{aka 'std::basic_ostream<char>&' from an rvalue of type 'void'
return v.init();
这是我的 class 定义:
template<class T>
class Vector
{
private:
std::vector<T> _Vec;
public:
void fillVector();
void printElements();
void init() { fillVector(); printElements(); }
friend std::ostream& operator<<(std::ostream& os, Vector& v) {
return v.init();
};
我该如何解决?
你做错了。
此模板具有误导性。名字好难听
这些额外的方法:fillVector
、printElements
、init
令人困惑(它们到底应该做什么?)。
很可能 printElements
缺少 std::ostream& stream
参数(可能还有 return 类型)。
您没有描述您要实现的功能类型。很可能这就是您需要的:
template<class T>
class PrintContainer
{
public:
PrintContainer(const T& container)
: mContainer { container }
{}
std::ostream& printTo(std::ostream& stream) const {
// or whatever you need here
for (const auto& x : mContainer) {
stream << x << ", ";
}
return stream;
}
private:
const T& mContainer;
};
template<class T>
std::ostream& operator<<(std::ostream& os, const PrintContainer<T>& p) {
return p.printTo(os);
}