对象矢量C ++

时间:2013-05-02 00:09:45

标签: c++ object vector

我正在尝试更多地了解向量和存储对象。我正在读取txt文件中的数据。我无法看到我犯的错误,它不起作用。

以下是我的主要方法

void Reader::readFoodFile() {
    string name;
    int cal, cost;
    ifstream file;
    file.open("food.txt");
    while (file >> name >> cal >> cost) {
        Food f(name, cal, cost);
        foodStorage.push_back(f); 

    } 
}
void Reader::getStorage() {
    for (unsigned int i = 0; i < foodStorage.size(); i++) {
        cout << foodStorage[i].getName();
    }
}

这是我的Food构造函数:

Food::Food(string newName, int newCalories, int newCost) {
    this->name = newName;
    this->calories = newCalories;
    this->cost = newCost;
}

在我的main.cpp文件中,我只是创建对象Reader(现在没有构造函数)并调用方法。

int main(int argc, char** argv) {

        Reader reader;
        reader.readFoodFile();
        reader.getStorage();
}

我想用从txt文件中获取数据的对象填充Vector,然后将其打印出来(暂时)。

有什么建议吗?

编辑;我的.txt文件布局是

apple 4 2
strawberry 2 3
carrot 2 2

这是我的Food.h和Reader.h

#ifndef FOOD_H
#define FOOD_H

#include <string> 
#include <fstream>
#include <iostream>

using namespace std;

class Food {
public:
    Food();
    Food(string, int, int);
    Food(const Food& orig);
    virtual ~Food();
    string getName();
    int getCalories();
    int getCost();
    void setCost(int);
    void setCalories(int);
    void setName(string);
    int calories, cost;
    string name;
private:

};

#endif  /* FOOD_H */`

and Reader.h
`#ifndef READER_H
#define READER_H
#include <string> 
#include <fstream>
#include <iostream>
#include <vector>
#include "Food.h"

using namespace std;

class Reader {
public:
    Reader();
    Reader(const Reader& orig);
    virtual ~Reader();

    void readFoodFile();
    void getStorage();
    vector<Food> foodStorage;

private:

};

#endif  /* READER_H */

2 个答案:

答案 0 :(得分:0)

我猜你的exe正在运行与你期望的那个不同的相对路径。调用file.open()后检查file.good()是否为true。当编程IDE(例如Visual Studio)运行带有写入exe的不同工作文件夹的exe时,这个问题很常见。

答案 1 :(得分:0)

我刚刚编译了你的代码,它对我来说很好....我使用了g ++ .... 你需要解决的问题..

  1. 摆脱.h文件中的构造函数,但未在.cpp
  2. 中定义
  3. 给出getName的实现。
  4. 以下是我的代码:

    food.h

    #ifndef FOOD_H 
    #define FOOD_H
    
    #include <string> 
    #include <fstream> 
    #include <iostream>
    
    using namespace std;
    
    class Food { public:
        //Food();
        Food(string, int, int);
        //Food(const Food& orig);
        //virtual ~Food();
        string getName();
        int getCalories();
        int getCost();
        void setCost(int);
        void setCalories(int);
        void setName(string);
        int calories, cost;
        string name; private:
    
    };
    
    #endif
    

    food.cpp

    #include<iostream> 
    #include<string> 
    #include "food.h" 
    using namespace std; 
     Food::Food(string newName, int newCalories, int newCost) {
        this->name = newName;
        this->calories = newCalories;
        this->cost = newCost; } string Food::getName() {
            return name; }
    

    reader.h

    #ifndef READER_H 
    #define READER_H 
    #include <string> 
    #include <fstream> 
    #include <iostream> 
    #include <vector> 
    #include "food.h"
    
        using namespace std;
    
        class Reader { public:
            //Reader();
            //Reader(const Reader& orig);
            //virtual ~Reader();
    
            void readFoodFile();
            void getStorage();
            vector<Food> foodStorage;
    
        private:
    
        };
    
        #endif
    

    reader.cpp

    #include <iostream> 
    #include "reader.h"
    
    using namespace std; void Reader::readFoodFile() {
        string name;
        int cal, cost;
        ifstream file;
        file.open("food.txt");
        while (file >> name >> cal >> cost) {
            Food f(name, cal, cost);
            foodStorage.push_back(f);
    
        } } void Reader::getStorage() {
        for (unsigned int i = 0; i < foodStorage.size(); i++) {
            cout << foodStorage[i].getName();
        } }
    

    的main.cpp

    #include<iostream>
    #include<fstream>
    #include "food.h"
    #include "reader.h"
    
    using namespace std;
    
    int main(int argc, char** argv) {
            Reader reader;
            reader.readFoodFile();
            reader.getStorage();
    }
    

    我编译使用 - g++ main.cpp reader.cpp food.cpp

    和我得到的输出 - applestrawberrycarrots

    所以,我不确定你错过了什么......希望这有帮助

    我没有添加std::endl ..如果您确实添加std::cout,那么每个项目都将在他们自己的行上。 此外,在完成使用后,您应该close