Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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
无法将参数从';int';至';国际及'; >我遵循PulalValk C++课程,下面是代码: #include <iostream> template <class T> T max(T& t1, T& t2) { return t1 < t2 ? t2 : t1; } int main() { std::cout << "Max of 33 and 44 is " << max(33, 44) << std::endl; return 0; }_C++_Visual Studio 2010 - Fatal编程技术网

无法将参数从';int';至';国际及'; >我遵循PulalValk C++课程,下面是代码: #include <iostream> template <class T> T max(T& t1, T& t2) { return t1 < t2 ? t2 : t1; } int main() { std::cout << "Max of 33 and 44 is " << max(33, 44) << std::endl; return 0; }

无法将参数从';int';至';国际及'; >我遵循PulalValk C++课程,下面是代码: #include <iostream> template <class T> T max(T& t1, T& t2) { return t1 < t2 ? t2 : t1; } int main() { std::cout << "Max of 33 and 44 is " << max(33, 44) << std::endl; return 0; },c++,visual-studio-2010,C++,Visual Studio 2010,本课程中的代码是用Visual Studio Express 2010编写的,而我的代码是用Visual Studio Ultimate 2010编写的 编辑 感谢所有人(甚至凯特·格雷戈里本人)提供了答案并澄清了一切。您不能将临时值作为t&传递。由于不更改参数,因此请改用const t& 顺便说一句,有内置的maxfunction如果您通过引用定义了带有参数的函数,那么对于所述参数,您只能使用变量名,并且您尝试使用数字。33和44都是右值;它们通过值而不是引用传递给函数。编译器无法将这两种类

本课程中的代码是用Visual Studio Express 2010编写的,而我的代码是用Visual Studio Ultimate 2010编写的


编辑


感谢所有人(甚至凯特·格雷戈里本人)提供了答案并澄清了一切。

您不能将临时值作为
t&
传递。由于不更改参数,因此请改用
const t&


顺便说一句,有内置的
max
function

如果您通过引用定义了带有参数的函数,那么对于所述参数,您只能使用变量名,并且您尝试使用数字。

33和44都是右值;它们通过值而不是引用传递给函数。编译器无法将这两种类型转换为预期的类型
int&
。使用变量(左值),因为它们可以通过引用传递:

int a = 33, b = 44;

max(a, b); // 44
template <class T>
T max(T const &t1, T const &t2);
template <class T>
T max(const T& t1, const T& t2)
{
    return t1 < t2 ? t2 : t1;
}
因为这里只处理基本类型(
int
),所以通过引用传递是多余的。按值传递会导致复制,但差异可以忽略不计:

template <class T>
T max(T t1, T t2);
在C++11中,您可以通过通用引用传递参数,以便绑定glvalues:

template <class T>
T max(T&& t1, T&& t2);

int main()
{
    int a{0}, b{0};

    max(a, b);
    max(1, 2);
}
模板
T最大值(T&&t1,T&&t2);
int main()
{
int a{0},b{0};
max(a,b);
最大值(1,2);
}
如果要在原始代码中保留左值引用语法,可以使用以下左值填充:

template<typename T>
T& lvalue(T&& t)
{
    return t;
}

int main()
{
    max(lvalue(1), lvalue(2));
}
模板
T&L值(T&T)
{
返回t;
}
int main()
{
最大值(左值(1),左值(2));
}
,因为非常量引用无法传递文本(通常是右值)(因为如果被调用方可以更改它们,则没有意义)。按值传递或按常量引用传递:

int a = 33, b = 44;

max(a, b); // 44
template <class T>
T max(T const &t1, T const &t2);
template <class T>
T max(const T& t1, const T& t2)
{
    return t1 < t2 ? t2 : t1;
}
模板
T最大值(常数T和t1,常数T和t2)
{
返回t1

模板
最大温度(t1,t2)
{
返回t1
整数文本不能作为非常量引用传递。此外,您的
max
函数可以使用
const
引用,因此请适当标记它们:

T max(const T& t1, const T& t2)

这里的答案在于测试中没有使用的无关代码。当然,我的小max()应该按值或const ref取值,这只是一个脑筋急转弯,我会尽快修复


但是完整的演示代码工作得很好。这是因为它包含更多的头,其中一个带来了xutility,因此
std::max
。这使我没有注意到我的
max
没有被使用。我将用
bigment
这样的名称重做演示,以消除这种情况再次发生。同时,是的,如果您想通过引用将文本传递给函数,它们必须是const ref。我知道这一点,但在编写测试工具时没有想到这一点,然后在出现错误代码时被愚弄了。我应该更仔细地重新阅读代码:感谢您提醒我注意这一点。(谢谢你参加这门课程,我希望你会觉得它很有帮助。)

小评论。您可以使用函数“max”的初始代码。尝试将呼叫从
max(34,44)
更改为
max(34,44)
。有时它会很有用

#包括
模板
T最大值(T&t1、T&t2)
{
返回t1STD::你有没有链接到课程,这就是课程的确切代码吗?这个课程叫做PulalValk+C++基础,第一部分,是确切的代码。还有代码,使用了带字符串的MAX和一个用户定义的类,但是它与整数被传递到MAX没有任何关系,只是显示函数。是的,他们在课程中说有一个Max。它是一个简单的演示如何使用模板。-谢谢你的回答!而且是的,我觉得这个课程很有帮助。我用C语言已经有一些年了,一直想尝试C++,但是……很可怕。这个课程只是让我轻松地溜进。意外调用<代码>的问题。std::max
而不是您自己的
max
只有在
使用名称空间std;
的情况下才可能在您自己的代码中的某个地方使用。真丢脸!;):-)在头文件中使用它是个坏主意-这表明它也可以在.cpp文件中咬您。还没有遇到过这个。谢谢。