我试图在我的一个类中简单地使用 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分配给它自己:它没有分配给成员nameaddressage相同,其他类的构造函数类似。使用初始化列表:
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/

10-13 07:31