Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ 将指针作为泛型c++;样板_C++_Templates_Pointers - Fatal编程技术网

C++ 将指针作为泛型c++;样板

C++ 将指针作为泛型c++;样板,c++,templates,pointers,C++,Templates,Pointers,我试图将指针(char*)传递给我编写的泛型函数。但是我得到了一个错误“重载的foo在这个上下文中是不明确的”。为什么会发生这种情况 template <class T> T foo(T a, T b) { return a+b; } int main() { char *c="Hello",*d="world"; foo<char*>(c,d); return 0; } 模板 T-foo(T-a,T-b) { 返回a+b; } int

我试图将指针(char*)传递给我编写的泛型函数。但是我得到了一个错误“重载的foo在这个上下文中是不明确的”。为什么会发生这种情况

template <class T>
T foo(T a, T b)
{
    return a+b;
}
int main()
{
    char *c="Hello",*d="world";
    foo<char*>(c,d);
    return 0;
}
模板
T-foo(T-a,T-b)
{
返回a+b;
}
int main()
{
char*c=“你好”、*d=“世界”;
foo(c,d);
返回0;
}

它没有理由添加两个指针,这会导致非感官指针。例如,假设第一个文本位于地址
0x7fffff00
,第二个文本位于
0x80000100
。然后,在32位机器上进行添加后,您将得到…
0
。零空指针

也许您想改用字符串,比如:

#include <string>

template <class T>
T foo(T a, T b)
{
    return a+b;
}

int main()
{
    std::string c="Hello", d="world";
    foo(c,d);
    return 0;
}
#包括
样板
T-foo(T-a,T-b)
{
返回a+b;
}
int main()
{
std::string c=“你好”,d=“世界”;
foo(c,d);
返回0;
}

另外请注意:在许多情况下(如本例),编译器可以为您推断模板类型,因此没有理由像
foo(c,d)

那样显式编写它,我真的怀疑这是错误。请发一张MCVE。但是A)不能添加指针,B)char*=“string literal”已弃用。使用
const char*
。还要注意
返回a+bchar*
的code>可能不会执行您认为它可以执行的操作。结果将是非常无用的。除了不能添加指针之外,代码没有问题。您对
foo
有其他定义吗?