2017-11-14 15 views
2

오류가 저에게 의미가 없으며, 이전에 이와 같은 작업을 수행했지만 티를 따라갔습니다. 당신은 그것을 무료 기능 아닌 멤버 함수을 만드는, friendostream& operator << (ostream&, const Matrica&)를 선언 error: non-member function 'std::ostream& operator<<(std::ostream&, const Matrica&)' cannot have cv-qualifier|std :: ostream을 참조하여 컴파일 할 때 갑자기 이상한 오류가 발생합니다.

+4

'friend' 연산자에서 마지막으로'const'를 삭제하십시오. '친구 '는 멤버 함수가 아닌 자유 함수이므로'this' 포인터가 없으므로'this'를'const'로 만들 필요가 없습니다. 내 대답을 참조하십시오 – Fureeish

+2

@ Fureeish 그 대답해야합니다. –

답변

6
friend ostream& operator << (ostream&, const Matrica&) const; 

:

#ifndef MATRICA_HPP_INCLUDED 
#define MATRICA_HPP_INCLUDED 

#include <iostream> 
#include <cstdio> 

#define MAX_POLJA 6 
using namespace std; 

class Matrica { 
private: 
short int **mtr; 
short int **ivicaX; 
short int **ivicaY; 
int lenX, lenY; 
public: 
Matrica(short int, short int); 
~Matrica(); 

int initiate_edge(const char *, const char *); 
short int get_vrednost (short int, short int) const; 
short int operator = (const short int); 
int check_if_fit(int *); 

friend ostream& operator << (ostream&, const Matrica&) const; // HAPPENS HERE <==== 
}; 

#endif // MATRICA_HPP_INCLUDED 

는 오류입니다. 무료 함수는 함수 선언 끝에 const 수정 자의 영향을받는 this 포인터가 없습니다. 즉, 자유 함수가있는 경우 const 함수가 될 수 없으므로이 함수는 영향을받을 포인터가 this이므로 의미가 없습니다. 다음과 같이 간단히 삭제하십시오.

friend ostream& operator << (ostream&, const Matrica&); 

이제 준비가 완료되었습니다.

+0

그게, 고마워 :) – Fish