gpt4 book ai didi

c++ - 运算符重载时未解析的外部符号

转载 作者:行者123 更新时间:2023-11-30 05:02:13 25 4
gpt4 key购买 nike

我有一个类,当我尝试在 visual studio 上编译它时,它给了我 4 个在 4 个运算符重载上未解析的外部符号。它在 .h 和 .cpp 文件的下面列出的 4 个运算符重载上给我 LNK2019 错误。似乎链接器没有正确链接函数或发生了其他事情。

.h

template <class T>
class Ecuatie
{
//some private things
public:
//other function definitions
Ecuatie<int> friend operator+(int x, Ecuatie<int> &e);
Ecuatie<int> friend operator+(Ecuatie<int> &e, int x);
Ecuatie<int> friend operator-(int x, Ecuatie<int> &e);
Ecuatie<int> friend operator-(Ecuatie<int> &e, int x);
};

.cpp

template <class T>
Ecuatie<int> operator+(Ecuatie<int> &e, int x) {
string aux = "+";
aux += to_string(x);
str += "+" + aux;
v.push_back(aux);
return (*this);
}

template <class T>
Ecuatie<int> operator+(int x, Ecuatie<int> &e) {
string aux = "";
aux += to_string(x);
str = aux + "+" + str;
if (v.size()) {
v[0] = "+" + v[0];
}
v.push_back("0");
for (int i = v.size() - 1; i >= 0; i--) {
v[i + 1] = v[i];
}
v[0] = aux;
return (*this);
}

template <class T>
Ecuatie<int> operator-(Ecuatie<int> &e, int x) {
string aux = "-";
aux += to_string(x);
v.push_back(aux);
str += "-" + aux;
return (*this);
}

template <class T>
Ecuatie<int> operator-(int x, Ecuatie<int> &e) {
string aux = "-";
aux += to_string(x);
str = aux + "-" + str;
if (v.size()) {
v[0] = "-" + v[0];
}
v.push_back("0");
for (int i = v.size() - 1; i >= 0; i--) {
v[i + 1] = v[i];
}
v[0] = aux;
return (*this);
}

有什么想法可以解决这些错误吗?更重要的是如何解决这些错误?

最佳答案

问题是您将运算符函数声明为非模板函数,但随后将它们定义为模板函数。

删除 template<class T>来自源文件中的定义,它应该可以工作。

相关问题:Why can templates only be implemented in the header file?

关于c++ - 运算符重载时未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996616/

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