我是cpp的新手并希望了解列表。 当我运行我的程序时它编译得很好,但我没有得到结果 我期待着。
这给了我输出
Legs: 0 Name:
应该是
Legs 4 Name: dog
任何人都能看到问题吗?
正如在评论部分中,我已经尝试了一个多小时并且让它开始工作,无法看到问题。
标头文件
using namespace std;
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal {
public:
Animal();
Animal(const Animal& orig);
virtual ~Animal();
int _Legs;
void SetName(string name);
string GetName();
private:
string _Name;
};
#endif /* ANIMAL_H */
Animal.cpp
Animal::Animal() {
}
Animal::Animal(const Animal& orig) {
}
Animal::~Animal() {
}
string Animal::GetName(){return _Name;}
void Animal::SetName(string name){_Name = name;};
主档
void List()
{
std::list<Animal> animal_list;
Animal temp;
temp = Animal();
temp._Legs = 4;
temp.SetName("Dog");
animal_list.push_back(temp);
for(std::list<Animal>::iterator list_iter = animal_list.begin();
list_iter != animal_list.end(); list_iter++)
{
std::cout<< "Legs:" << list_iter->_Legs << " Name: " << list_iter->GetName() << endl;
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
List();
return 0;
}
答案 0 :(得分:4)
您没有任何东西的原因是您的复制构造函数不正确。当您将temp
添加到列表中时,您会复制Animal::Animal(const Animal& orig) {
}
,并且您正在访问此副本。
你有
$("button").click(function () {
var first_num = Number($("input[name='first_num']").val());
var second_num = Number($("input[name='second_num']").val());
$("input[name='sum_of_num']").val(first_num + second_num);
});
这意味着当你复制时,该类的所有成员都是默认初始化的,没有其他任何事情发生。
最简单的解决方案就是摆脱它,让编译器提供默认的拷贝构造函数为你做副本。
答案 1 :(得分:3)
Animal::Animal(const Animal& orig) {
}
这是一个(空)复制构造函数。因此,在复制班级的对象时,例如当你...
animal_list.push_back(temp);
...将其添加到列表中,副本不会正确设置成员。
解决方案:只需删除该复制构造函数(以及析构函数)。请参阅rule of zero。