我完成了这项任务,因为我理解它,但我很确定存在根本问题。我期待着您对如何改进它的意见。问题定义如下:
两节课。 XBoxGame
和WorldPeace
。
名为Gift
的模板类。有一种叫做shake()
的方法。在shake()
内,我们将在模板类型MakeNoise()
的实例上调用T
。仅XBoxGame
MakeNoise()
作为方法。
现在在main()
,只要您尝试制作一个“Gift
持有XBoxGame
”(看看我在那里做了什么?),你会知道它是否有效编译。尝试Gift<WorldPeace>
并且它将无法编译,因为缺少MakeNoise()
。您上传的内容应该是正确模板XBoxGame
类调用shake()
和WorldPeace()
编译,但仅限于main()
中未使用它。
最终结果“你只能把一个在礼物中发出噪音的课程”。 我写的代码:
#include <iostream>
class XBoxGame
{
void makeNoise(int,int)
{
std::cout << "Is this Working ? ";
};
};
class WorldPeace
{};
template <typename T>
class Gift
{
public:
T shake()
{
void XboxGame::makeNoise();
}
};
主要:
#include "Template.h"
using namespace std;
int main()
{
Gift <XBoxGame> ;
Gift <WorldPeace>;
return 0;
}
答案 0 :(得分:0)
我在你的代码中看到了一些问题。
没有特别的顺序......
(1)在Gift::shake()
XboxGame::makeNoise()
中,您拨打了B
,但是您定义的班级为XBoxGame
Gift::shake()
。
(2)在你写的void XBoxGame::makeNoise();
Gift::shake()
这是方法的原型,而不是通话
(3)在void
中,如果删除XBoxGame::makeNoise();
(请参阅第2点),则执行以下说明
makeNoise()
成为static
XBoxGame
中对class
makeNoise()
方法的调用;但是您将static
定义为非makeNoise()
方法。
您可以将static
定义为XBoxGame
,也可以从实际的 T shake()
{
XBoxGame xbg;
xbg.makeNoise();
}
对象调用;
T shake()
{ XBoxGame().makeNoise(); }
甚至
makeNoise()
(4)您(隐式)将private
定义为XBoxGame
的{{1}}方法。如果您想在Gift
对象中调用它,则必须将其声明为public
(或将XBoxGame
定义为struct
,因此隐式声明makeNoise()
为public
makeNoise()
(5)你在XBoxGame
中定义了int
作为接收一些(未使用的)int值的方法,但你没有参数调用它;你必须纠正这一点;一个解决方案可以通过几个 T shake()
{ XBoxGame().makeNoise(0, 0); }
来调用它;通过例子
main()
(6)在Gift <XBoxGame>;
Gift <WorldPeace>;
中,按照说明
Gift<XBoxGame> gx;
Gift<WorldPeace> gv;
什么也没有宣布;你应该为一组变量提供一对名字
Gift<XBoxGame>();
Gift<WorldPeace>();
或者在创建一些临时对象时进行转换(避免一对“未使用的变量”警告)
shake()
(7)如果你想看到“这有效吗?”消息,您必须调用Gift<XBoxGame>().shake();
Gift<WorldPeace>().shake();
方法
T
(8)你的摇动方法被声明为返回void
但没有返回;这是一个可以解决的问题,例如,将其定义为 void shake()
{ XBoxGame().makeNoise(0, 0); }
方法
#include <iostream>
class XBoxGame
{
public:
void makeNoise(int,int)
{ std::cout << "Is this Working ? " << std::endl; };
};
class WorldPeace
{};
template <typename T>
class Gift
{
public:
void shake()
{ XBoxGame().makeNoise(0, 0); }
};
int main()
{
Gift<XBoxGame>().shake();
Gift<WorldPeace>().shake();
}
因此,以下代码编译
Gift<XBoxGame>
希望这有帮助。
- 编辑 -
(9)不确定理解,但是,如果你只想XBoxGame
编译(因为只有makeNoise()
实现shake()
,我想你应该用T
来编写 void shake()
{ T().makeNoise(0, 0); }
makeNoise()
类型;类似
XBoxGame
如果 void shake()
{ T::makeNoise(0, 0); }
是makeNoine()
或
static
如果<div style="height: 100%" id="map"></div>
是standardNum = 50
def numberChecker(number, standardNum):
if number > standardNum:
raise ValueError
return True
while True:
my_number = int(input("Give me a small whole number: "))
try:
if numberChecker(my_number, standardNum):
break
except ValueError:
print("Your number is too big.")
方法。