gpt4 book ai didi

c++ - C++代码中的 “Undefined reference to operator<<”错误

转载 作者:行者123 更新时间:2023-12-02 10:12:28 24 4
gpt4 key购买 nike

我编写了一个简单的运算符重载函数,如果我在类中定义它(块注释),该函数可以很好地工作,但是如果在类外部进行定义,则会出错。知道错误在哪里吗?

#include<iostream>

using namespace std;


template<class T>
class vector{

int d;
public:
vector(){
d = 0;
}
vector(T data){
d = data;
}

friend void operator << (vector &v, T data);
/*{
cout << data << endl;
}*/

};

template<class T>
void operator << (vector<T> &v, T data){

cout << data;
}


int main(){

vector<int> v1;
v1 << 10;

return 0;
}

最佳答案

类模板定义中的此 friend 函数声明

friend void operator << (vector &v, T data);
不是模板函数(如果是在类中定义的,则它是模板实体)。
另一方面,此声明在类模板定义之外
template<class T>
void operator << (vector<T> &v, T data){

cout << data;
}
定义模板函数。
在类定义中定义friend函数。在这种情况下,编译器将为类模板的每个使用的特殊化生成函数的定义。或者,对于每个使用的类特化,您必须自己明确定义(提供)一个单独的非模板好友函数。
这是一个示范节目
#include<iostream>

template<class T>
class vector{

int d;
public:
vector(){
d = 0;
}
vector(T data){
d = data;
}

friend void operator << (vector &v, T data);
/*{
cout << data << endl;
}*/

};

template<class T>
void operator << (vector<T> &v, T data)
{
std::cout << data;
}

void operator << (vector<int> &v, int data)
{
std::cout << data;
}

int main()
{

vector<int> v1;
v1 << 10;

return 0;
}
程序输出为
10
在程序中,有两个重载函数 operator <<。第一个是在类定义中声明的 friend 非模板函数,第二个是不是该类的 friend 函数的模板函数。对于main中使用的类特化 vector<int>,您必须在类外部提供非模板 friend 功能定义。
或者,您可以在类中定义friend函数。

关于c++ - C++代码中的 “Undefined reference to operator<<”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995349/

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