Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试图将指向int的指针传递给一个将指针指向long的函数,如何做到这一点_C++_Templates_Visual C++_Pointers - Fatal编程技术网

C++ 试图将指向int的指针传递给一个将指针指向long的函数,如何做到这一点

C++ 试图将指向int的指针传递给一个将指针指向long的函数,如何做到这一点,c++,templates,visual-c++,pointers,C++,Templates,Visual C++,Pointers,下面是函数 template <typename T> T sum(T *x, T *y) { T z(0); z=*x+*y; return z; } 模板T和(T*x,T*y) { tz(0); z=*x+*y; 返回z; } 我现在正在学习模板 以下是我在主子程序中尝试执行的操作: int i(1), j(2); long p(12), q(3); std::cout<<sum(&i,&j)<<" is th

下面是函数

template <typename T> T sum(T *x, T *y)
{
    T z(0);
    z=*x+*y;
    return z;
}
模板T和(T*x,T*y)
{
tz(0);
z=*x+*y;
返回z;
}
我现在正在学习模板

以下是我在主子程序中尝试执行的操作:

int i(1), j(2);
long p(12), q(3);

std::cout<<sum(&i,&j)<<" is the output\n";
std::cout<<sum(&((long)i),&q)<<" is the second output\n";
inti(1),j(2);
长p(12),q(3);

std::cout您不应该在
sum
函数中使用指针。在这里使用它们是没有意义的。您可以使用常量引用,因为参数不会在函数体内修改:

template <typename T> 
T sum(const T &x, const T &y)
{
    T z(0);
    z=x + y;
    return z;
}
模板
总和(常数T&x、常数T&y)
{
tz(0);
z=x+y;
返回z;
}
当您使用两个不同类型的参数调用函数时,编译器将无法推断模板参数类型。因此,您需要明确指出您想要哪一个:

std::cout << sum<long>(i, q) << std::endl;

std::cout为什么您的
sum
函数要使用指针?为什么不干脆
const T&
?我没有想到这一点,我只是想让我们使用指针,让第一个例子变得很难。这里是2315,可能我不应该这样做。好吧,我不明白为什么要把指向整数的指针(或引用)传递给函数——这会毫无理由地让一切变得更复杂。这是因为实际上,您的类型是其他类型,作为指针/引用传递确实有意义吗?[也就是说,这在某种程度上是一种XY问题]我将其改为使用左值引用。即使是现在,我也不能让它花费(长时间)I作为参数,即使我正在铸造它。@quantum231 2315?C++在未来302年内仍在积极使用吗?该死量子计算广泛可用吗(因此你的昵称)?卡戴珊仍然是真人秀明星吗?+1您也可以保留显式演员阵容,如下所示:。
std::cout << sum(static_cast<long>(i), q) << std::endl;