vect.hpp: 13: 33: ошибка: объявление оператора << нефункциональным - PullRequest
1 голос
/ 08 мая 2020

У меня эта ошибка

vect.hpp: 13: 33: error: объявление 'operator <<' как нефункционального </p>

для кода:

#include <iostream>

template<unsigned d>
class Vect{
    protected:
        double * coord;
    public:
        Vect() {for(int i=0, i<d, i++){*(coord+i)=0;}}
        ~Vect(){delete coord; coord=nullptr;}
        Vect(const Vect &);
        double operator=(const Vect &);
        double operator[](unsigned i) const{return *(coord+i);}
        friend std::ostream & operator<< <>(std::ostream &, const Vect<d> &); 
};

для линии:

friend std::ostream & operator<< <>(std::ostream &, const Vect<d> &); 

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вы также можете сделать определение внутри класса.

#include <iostream>

template<unsigned d>
class Vect{
    protected:
        double * coord;
    public:
        Vect() {for(int i=0, i<d, i++){*(coord+i)=0;}}
        ~Vect(){delete coord; coord=nullptr;}
        Vect(const Vect &);
        double operator=(const Vect &);
        double operator[](unsigned i) const{return *(coord+i);}
        friend std::ostream & operator<<(std::ostream &os, const Vect<d> &obj)
        {
          // Your code goes here
        }

};
1 голос
/ 08 мая 2020

Объявление друга относится к экземпляру operator<<, но не существует объявления первичного шаблона. Заранее заявить шаблон оператора. например,

// forward declaration
template<unsigned d>
class Vect;

// primary template declaration of operator<<
template<unsigned d>
std::ostream & operator<< (std::ostream &, const Vect<d> &); 

template<unsigned d>
class Vect{
    protected:
        double * coord;
    public:
        Vect() {for(int i=0; i<d; i++){*(coord+i)=0;}}
        ~Vect(){delete coord; coord=nullptr;}
        Vect(const Vect &);
        double operator=(const Vect &);
        double operator[](unsigned i) const{return *(coord+i);}
        friend std::ostream & operator<< <>(std::ostream &, const Vect<d> &); 
};

LIVE

...