Tôi đang cố gắng để có được một chức năng bạn bè bên trong một lớp templated để biên dịch, nhưng thông báo lỗi và cảnh báo tôi không hiểu. Tôi đã thực hiện một cuộc biểu tình của vấn đề. Các lỗi tôi nhận được là:Chức năng của thành viên Operated Class Friend Operating
prog.cpp:8:57: error: non-class, non-variable partial specialization C operator+(const B& lhs, const C& rhs);
prog.cpp:15:59: warning: friend declaration 'C operator+(const B&, const C&)' declares a non-template function [-Wnon-template-friend] friend C operator+(const B& lhs, const C& rhs);
prog.cpp:15:59: note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
#include <iostream>
using namespace std;
template<typename A, typename B>
class C;
template<typename A, typename B>
C<A, B> operator+<A, B>(const B& lhs, const C<A, B>& rhs);
template<typename A, typename B>
struct C
{
A val_;
C operator+(const C& other) const;
friend C<A, B> operator+(const B& lhs, const C<A, B>& rhs);
};
template<typename A, typename B>
C<A, B> C<A, B>::operator+(const C<A, B>& other) const
{
C<A, B> c;
c.val_ = this->val_ + other.val_;
return c;
}
template<typename A, typename B>
C<A, B> operator+(const B& lhs, const C<A, B>& rhs)
{
C<A, B> c;
c.val_ = lhs + rhs.val_;
return c;
}
int main()
{
C<string, char> c0,c1;
c0.val_ = " C0 ";
c1.val_ = " C1 ";
cout << "Stuct:" << (c0 + c1).val_ << '\n';
cout << "Friend:" << ('~' + c1).val_ << endl;
return 0;
}
Bạn không cần phải khai báo đầu tiên của 'operator +', đó là sai. – Holt
Đây là một ví dụ về vấn đề. Tôi cần ba biểu mẫu trong mã thực tế của tôi: toán tử C + (const C & other), toán tử C + (const B & other), và toán tử C (const B & lhs, const C & rhs). N.B. không thực sự biên dịch mã, chỉ là các dạng chung của nhu cầu. – JadziaMD