2016-03-14 3 views
0

Я получаю ошибку компилятора undefined reference to при попытке встроить operator!= в качестве функции друга.Inline operator! = Undefined reference

Вот пример:

// color.hpp 
class Color 
{ 
    friend bool operator==(const Color& lhs, const Color& rhs); 
    inline friend bool operator!=(const Color& lhs, const Color& rhs); 
}; 

// color.cpp 
bool operator==(const Color& lhs, const Color& rhs) 
{ 
} 

inline bool operator!=(const Color& lhs, const Color& rhs) 
{ 
} 

Я не могу реализовать операторы в файле заголовка, так как это создает многочисленные ошибки определения.

Я компилирую с --std=c++11, g ++ 5.2.

+3

делает это, если вы удаляете 'inline' при объявлении функции друга? – vu1p3n0x

+0

Нет, это не помогает – user3728501

ответ

0

Удалить определение inline из определения класса.

После определения класса в заголовочном файле, добавьте следующее:

inline bool 
operator!=(const Color& lhs, const Color& rhs) 
{ 
    return !(lhs == rhs); 
} 

Удалить определение в исходном файле.

+0

Это похоже на компиляцию, за исключением того, что я получаю несколько ошибок определения на 'operator ==', который не объявляется с помощью 'inline' – user3728501

+0

Один из них реализован в терминах другого, конечно, – user3728501

+0

Перемещенный' operator == 'обратно в' .cpp' файл, и это работает, почему ?! – user3728501