@Loligan

Почему ругается на дружественную функцию?

#ifndef TWO_H
#define TWO_H
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

class two
{
private:
    string a;
    string b;
    int c;
    vector<two*> vect;
    public:
    two();
    two(string a,string b,int c);
    void setA(string value);
    void setB(string value);
    void setC(int value);

    string getA();
    string getB();
    int getC();

    struct aaa
    {
        string a;
        aaa(string _a):a(_a){}
        bool operator()(two *t)
        {
            return t->getA()==a;
        }
    };



    void sorted();
    void add(two *t);
    friend bool sort_pred(const two *a1 ,const two *a2);

};

bool sort_pred(const two *a1,const two *a2)
<b>{ здесь ругается</b> 
    return a1->a>a2->a;
}



#endif // TWO_H


Текст ошибок:
F:\tmp\one\8\..\..\one\two.h:46: ошибка: first defined here
:-1: ошибка: collect2: ld returned 1 exit status
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Причина, вероятно, в том, что ты допустил код в хедере, и sort_pred оказался реализован дважды в разных единицах компиляции.
Либо сделай sort_pred inline (inline кода не производит, производит его тот, кто этот inline вызовет), либо вынеси его в cpp-файл.

Ах, да. Почему всё правильно с этой функцией…

bool operator()(two *t)
{
    return t->getA()==a;
}


А потому что тело внутри класса автоматически inline и тоже кода не производит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы