指针作为 C++ 中的模板参数
pointers as template arguments in c++
我从以下代码中得到一个未解析的外部符号 "reducedFraction(uint64_t*,uint64_t*)" 的 link 错误。
在 main.cpp 我有:
template <typename T> T greatestCommonFactor(T a, T b) {
//make b the smaller
T t;//temp
if (b > a)
{
t = a;
a = b;
b = t;
}
//archimedes method
while (b != 0)
{
t = b;
b = a % b;
a = t;
}
return a;
}
template <typename T>
void reduceFraction(T *a, T *b) {
T gcf = greatestCommonFactor(*a, *b);
*a /= gcf;
*b /= gcf;
}
int main() {
uint64_t numerator;
uint64_t denominator;
numerator = 121;
denominator = 55;
cout << numerator << " " << denominator << endl;
reduceFraction(&numerator, &denominator);
cout << numerator << " " << denominator << endl;
}
当我将 "uint64_t" 作为非模板函数而不是 "T" 时,函数 greatestCommonFactor 和 reduceFraction 工作正常。事实证明,当我将 reduceFraction 更改为非模板函数时,link 错误现在是 greatestCommonFactor.
将 reduceFraction 的第一行更改为
auto gcf = greatestCommonFactor(*a, *b);
不行。
我做错了什么?很明显,我正在尝试减少一个分数。当我将代码编写为非模板函数时,它工作得很好。提前致谢。
LNK2019 unresolved external symbol "void __cdecl reduceFraction(unsigned __int64 *,unsigned __int64 *)" (?reduceFraction@@YAXPA_K0@Z) referenced in function _main visualStudioEuler C:\Users\George\Documents\Visual Studio 2015\Projects\visualStudioEuler\visualStudioEuler\main.obj 1
一些旁注:
我在 windows 10 上使用 visual studio 社区,代码是来自 CodeLite 的 "ported",如果有帮助的话。因此,我在使用 "stdafx.h" 和其他头文件时遇到了一些麻烦。
代码现在可以工作了。问题出在头文件上。与"stdafx.h"有关。对不起,我现在无法给出更好的答案。只有在其他人遇到类似问题并且不确定他们的代码时才发布此信息。谢谢大家的帮助!
我从以下代码中得到一个未解析的外部符号 "reducedFraction(uint64_t*,uint64_t*)" 的 link 错误。
在 main.cpp 我有:
template <typename T> T greatestCommonFactor(T a, T b) {
//make b the smaller
T t;//temp
if (b > a)
{
t = a;
a = b;
b = t;
}
//archimedes method
while (b != 0)
{
t = b;
b = a % b;
a = t;
}
return a;
}
template <typename T>
void reduceFraction(T *a, T *b) {
T gcf = greatestCommonFactor(*a, *b);
*a /= gcf;
*b /= gcf;
}
int main() {
uint64_t numerator;
uint64_t denominator;
numerator = 121;
denominator = 55;
cout << numerator << " " << denominator << endl;
reduceFraction(&numerator, &denominator);
cout << numerator << " " << denominator << endl;
}
当我将 "uint64_t" 作为非模板函数而不是 "T" 时,函数 greatestCommonFactor 和 reduceFraction 工作正常。事实证明,当我将 reduceFraction 更改为非模板函数时,link 错误现在是 greatestCommonFactor.
将 reduceFraction 的第一行更改为
auto gcf = greatestCommonFactor(*a, *b);
不行。
我做错了什么?很明显,我正在尝试减少一个分数。当我将代码编写为非模板函数时,它工作得很好。提前致谢。
LNK2019 unresolved external symbol "void __cdecl reduceFraction(unsigned __int64 *,unsigned __int64 *)" (?reduceFraction@@YAXPA_K0@Z) referenced in function _main visualStudioEuler C:\Users\George\Documents\Visual Studio 2015\Projects\visualStudioEuler\visualStudioEuler\main.obj 1
一些旁注: 我在 windows 10 上使用 visual studio 社区,代码是来自 CodeLite 的 "ported",如果有帮助的话。因此,我在使用 "stdafx.h" 和其他头文件时遇到了一些麻烦。
代码现在可以工作了。问题出在头文件上。与"stdafx.h"有关。对不起,我现在无法给出更好的答案。只有在其他人遇到类似问题并且不确定他们的代码时才发布此信息。谢谢大家的帮助!