0
所以我正在做一個矢量/矩陣處理程序,我不能重載索引運算符,我必須使用(作爲公共方法)訪問類的私人數據。代碼:問題重載[]運營商
頁眉:
#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;
}
我也得到噸的錯誤。例如,也是困擾我的一個是:
[email protected]:~/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作爲第二個操作符?我猜[]本身是以某種方式工作的,因爲它將其解釋爲浮點類型,但爲什麼它不能與>>進行交互?我是新來的,所以如果它是簡單明顯的抱歉,但我找不到它。 我知道這可能是由於得到/沒有得到參考,但我無法弄清楚。
你的常量超載有錯誤的返回類型。另外,對於足夠小的內建類型,您通常會返回值,而不是使用常量引用。 – Deduplicator
@Deduplicator糟糕,剪切和粘貼失敗。儘管我會保留參考。按價值回報是不一樣的。 – juanchopanza
風格和效率的問題,如果不內聯,這是我避免在這種情況下的參考(除非我寫一個模板,它是額外的工作)。我相信一個人可以在那裏開始一個很好的火焰...... – Deduplicator