gpt4 book ai didi

c++ - 与模板类中的友元函数链接错误

转载 作者:行者123 更新时间:2023-11-30 04:10:09 27 4
gpt4 key购买 nike

我在使用自制的 Complex 类时遇到链接问题。

类定义:

template<class T>
class Complex
{
public:
Complex(const T real = 0, const T imag = 0);
Complex(const Complex<T>& other);
~Complex(void) {};

Complex<T> operator*(const Complex<T>& other) const;
Complex<T> operator/(const Complex<T>& other) const;
Complex<T> operator+(const Complex<T>& other) const;
Complex<T> operator-(const Complex<T>& other) const;

friend void operator*=(const Complex<T>& z,const Complex<T>& other);
friend void operator/=(const Complex<T>& z,const Complex<T>& other);
friend void operator+=(const Complex<T>& z,const Complex<T>& other);
friend void operator-=(const Complex<T>& z,const Complex<T>& other);
void operator=(const Complex<T>& other);

friend T& real(Complex<T>& z);
friend T& imag(Complex<T>& z);
friend T abs(Complex<T>& z);
friend T norm(Complex<T>& z);
private:
T real_;
T imag_;
};

abs的实现:

template<class T>
T abs(Complex<T>& z)
{
return sqrt(z.real_*z.real_ + z.imag_*z.imag_);
}

我这样使用函数 abs :if(abs(z) <= 2) .

这是我遇到的一些错误:

Error   4   error LNK2001: unresolved external symbol "long double __cdecl abs(class Complex<long double> &)" (?abs@@YAOAAV?$Complex@O@@@Z) C:\Users\Lucas\Documents\Visual Studio 2012\Projects\Fractals\Fractals\Main.obj Fractals
Error 3 error LNK2001: unresolved external symbol "long double & __cdecl imag(class Complex<long double> &)" (?imag@@YAAAOAAV?$Complex@O@@@Z) C:\Users\Lucas\Documents\Visual Studio 2012\Projects\Fractals\Fractals\Main.obj Fractals

我在使用 Complex<float> 时遇到同样的错误而不是 Complex<long double> .我使用 Visual C++ 2012。如果你给我一些关于如何解决这个问题的提示,我会很高兴。谢谢。

最佳答案

函数声明为

template <typename T>
class Complex {
// ...
friend T abs(Complex<T>& z);
// ...
};

不是函数模板!它看起来有点像嵌套在类模板中的一个,但这还不够。以下是您可能想写的内容:

template <typename T> class Complex;
template <typename T> T abs(Complex<T>&);


template <typename T>
class Complex {
// ...
friend T abs<T>(Complex<T>& z);
// ...
};

或者,您可以在将其声明为 friend 时实现 abs()

关于c++ - 与模板类中的友元函数链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com