我试图在我的一个类中简单地使用 vector 。尝试访问 vector 时,它告诉我它是未定义的(但是我已经在 header 中定义了它)。
我有两个类,人和狗。一个人可以拥有一只或多只狗,因此我想将一个人拥有的每只狗添加到一个数组中。这应该真的很简单,所以这个问题真的开始引起我的注意。这是一些代码:
类Person.cpp:
#include "Person.h"
#include "stdafx.h"
#include <iostream>
using namespace std;
Person::Person(string name, string address, int age)
:name(name),
address(address),
age(age)
{}
int Person::getAge(){
return age;
}
std::string Person::getDogInfo(int index){
}
void Person::addDog(string dogName, string breed){
dogCollection.push_back(Dog(dogName, breed));
}
std::vector<Dog> getDogs(){
return dogCollection; //dogCollection undefined error here
}
这是Person.h:
#ifndef Person_H
#define Person_H
#include <vector>
#include "Dog.h"
using namespace std;
class Person{
public:
Person(string name, string address, int age);
string getName(){return name};
string getAddress(){return address};
void addDog(string dogName, string breed);
string getDogInfo(int index);
std::vector<Dog> getDogs();
int getAge();
private:
string name;
string address;
int age;
std::vector<Dog> dogCollection;
};
#endif
如果您想看看我的狗类,我也会将它们粘贴:
Dog.cpp:
#include "stdafx.h"
#include <iostream>
#include "dog.h"
Dog::Dog(string dogName, string breed)
:dogName(dogName),
breed(breed){}
std::string Dog::Dog.getDogName(){
return dogName;
}
std::string Dog::Dog.getBreed(){
return breed;
}
和Dog.h:
#ifndef Dog_H
#define Dog_H
#include <iostream>
using namespace std;
class Dog{
public:
Dog(std::string dogName, std::string breed);
std::string getDogName();
std::string getBreed();
private:
std::string dogName;
std::string breed;
};
#endif
另外,我只想补充一点,这不是功课。我已经习惯了Java,但我只是想学习一些C++,因为我在以后的工作中需要它。
编辑:更新了代码
最佳答案
这是不正确的(并且不是必需的):
dogCollection = new std::vector<Dog>; // Remove this line.
因为
dogCollection
不是std::vector<Dog>*
。这也是不正确的:
void Person::addDog(string dogName, string breed){
Dog *newDog = new Dog(dogName, breed);
dogCollection.push_back(newDog);
}
因为
dogCollection
包含Dog
实例,而不是Dog*
。改成:void Person::addDog(string dogName, string breed){
dogCollection.push_back(Dog(dogName, breed));
}
所有的构造函数都有一个问题:
Person::Person(string name, string address, int age){
name=name;
address=address;
age=age;
}
这是将参数
name
分配给它自己:它没有分配给成员name
。 address
和age
相同,其他类的构造函数类似。使用初始化列表:Person::Person(string name, string address, int age) :
name(name),
address(address),
age(age)
{}
此方法不返回
std::string
:string Person::getDogInfo(int index){
}
编辑:
缺少类(class)限定词:
std::vector<Dog> getDogs(){
return dogCollection; //dogCollection undefined error here
}
意味着这只是一个自由函数,与
Person
类没有关联,因此无法访问dogCollection
。改成:
std::vector<Dog> Person::getDogs(){
return dogCollection;
}
关于c++ - 在自定义类中定义 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9789070/