重载 [] 运算符时出现问题
Trouble overloading [] operator
所以我正在做一个用于向量/矩阵处理的程序,我不能重载索引运算符,我必须使用它(作为公共方法)来访问类的私有数据。 代码:
页眉:
#ifndef WEKTOR_HH
#define WEKTOR_HH
#include "rozmiar.h"
class Wektor {
float skladowa[ROZMIAR];
public:
float operator[] (int i);
};
std::istream& operator >> (std::istream &Strm, Wektor &Wek);
std::ostream& operator << (std::ostream &Strm, const Wektor &Wek);
#endif
Wektor.cpp:
#include "Wektor.hh"
#include <iostream>
float Wektor::operator[] (int i){
if(i<=ROZMIAR) return skladowa[i];
else return skladowa[ROZMIAR];}
std::istream& operator >> (std::istream &Strm, Wektor &Wek){
std::cin >> Wek[1] >> Wek[2] >> Wek[3];
return Strm;}
std::ostream& operator << (std::ostream &Strm, const Wektor &Wek){
std::cout << Wek[1] << Wek[2] << Wek[3] << std::endl;
return Strm;}
主要:
#include <iostream>
#include "Wektor.hh"
#include "Macierz.hh"
#include "UkladRownanLiniowych.hh"
using namespace std;
int main()
{
Wektor w1;
cin >> w1;
cout << endl << " Wczytano: " << endl << endl;
cout << w1 << endl;
}
我收到很多错误。例如,困扰我的是:
tobi@don-VM:~/PO/uklad$ make
g++ -c -g -Iinc -Wall -pedantic -o obj/main.o src/main.cpp
g++ -c -g -Iinc -Wall -pedantic -o obj/Wektor.o src/Wektor.cpp
src/Wektor.cpp: In function ‘std::istream& operator>>(std::istream&, Wektor&)’:
src/Wektor.cpp:11:12: error: no match for ‘operator>>’ (operand types are ‘std::istream {aka std::basic_istream<char>}’ and ‘float’)
std::cin >> Wek[1] >> Wek[2] >> Wek[3];
^
src/Wektor.cpp:11:12: note: candidates are:
In file included from /usr/include/c++/4.8/iostream:40:0,
from inc/Wektor.hh:5,
from src/Wektor.cpp:1:
为什么它说>>float作为第二个运算符有问题?我想 [] 本身以某种方式工作,以防它将其解释为浮点类型,但为什么它不能与>>交互?我是新手,所以如果它是简单明了的东西,对不起,但我找不到它。我知道这可能是由于获得/未获得参考而发生的,但我无法弄清楚。
问题是您的运算符按值返回:
float operator[] (int i);
当你把这个结果直接传递给operator>>
时,你传递了一个临时的,这个运算符需要一个左值引用,允许修改的东西。从技术上讲,不能在标准C++中将右值引用(临时)绑定到非常量引用。
因此,更改运算符以返回引用:
float& operator[] (int i);
通常的做法是提供const
重载,返回const
引用:
const float& operator[] (int i) const;
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 运算符继承和 cpp 核心准则 c.128 的问题
- 在C++中使用重载提取运算符时出现问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 关于条件块的问题与&&运算符有关
- 重载运算符与添加问题
- 加、乘、除、减复数的问题 C++ - 运算符重载
- 我需要这方面的帮助C++在使用逻辑运算符时是/否问题
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 如何解决不明确的运算符过载问题?
- 屏幕插入运算符<<的运算符过载问题
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 用户定义的文本运算符(在原始模式下)存在问题
- 关于重载 -> 运算符中 const 关键字的特定位置的问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- constexpr 运算符重载使用参数的问题
- c++中重载输入运算符的问题
- 有趣的问题运算符重载