C++ 无符号长vs大小\u t导致函数重载失败

C++ 无符号长vs大小\u t导致函数重载失败,c++,long-integer,unsigned,size-t,C++,Long Integer,Unsigned,Size T,我定义了一个函数: void myfunc(size_t param1, size_t param2){ ... } 它很好用。但是当我试图重载这个函数时 void myfunc(unsigned long param1, unsigned long param2){ ... } 它无法编译,并显示以下消息: 错误:无法重载myfunc(无符号长参数1、无符号长参数2) 如果不将输入参数强制转换为大小,如何解决此问题 谢谢 听起来,size\u t和unsigned long在您的系统上是同

我定义了一个函数:

void myfunc(size_t param1, size_t param2){
...
}
它很好用。但是当我试图重载这个函数时

void myfunc(unsigned long param1, unsigned long param2){
...
}
它无法编译,并显示以下消息: 错误:无法重载myfunc(无符号长参数1、无符号长参数2)

如果不将输入参数强制转换为大小,如何解决此问题


谢谢

听起来,size\u t和unsigned long在您的系统上是同一类型的;编译器抱怨您有两个相同的函数。此外,使用多个数字类型重载通常是一个坏主意,因为由于强制转换的可能性,编译器可能无法识别您想要的重载。请尝试改用模板:

template <T>
void myfunc(T param1, T param2){
...
}
模板
void myfunc(T参数1,T参数2){
...
}

你是想标记这个C++吗?这可能是因为 SsieZiT被定义为环境中的“代码>未签名的长< /COD>”。C/C++在这方面没有一个非常强大的类型系统。无论如何,这是一个坏主意,因为即使它起作用,当您尝试将函数与
int
s一起使用时,您也会遇到不明确的调用错误。你能解释一下你想解决什么问题吗?谢谢大家。实际上,它通过了编译,但在链接阶段失败了,在链接阶段,一个marco调用myFunc()。size\u不是一个无符号整数吗?它可以是unsigned int32或unsigned int64,但它可以是unsigned long吗?@mhs这个术语可能会有点混乱;int、long、int32、uint32等。。。都是整数类型。据我所知,它们通常被定义为基本类型,例如int或unsignedlong。不同之处在于,标准保证基本类型至少具有一定的大小,而intX_t类型保证正好是X大小。因此,如果您所在的系统的long是64位数据类型,那么uint64\u t可能只是无符号long。同样,如果您使用的是64位系统,那么大小也可能是typedef'd到unsigned long。谢谢大家。实际上,它通过了编译,但在链接阶段失败,在链接阶段,一个marco调用myFunc()。