尝试调用将向向量添加数据的函数时出错

时间:2014-09-14 05:07:17

标签: c++ class vector

我得到一个错误,我认为这是由我编写的函数引起的,该函数来自我在类store.cpp中的store中的向量中的文件存储数据。

Main.cpp的

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
#include "store.h"

using namespace std;

int main ()
{
    store data;
    ifstream inFile ("C:/Users/Owner/Desktop/Albums.csv");
    string line;
    string item;
    int num;
    int itemnum;
    int linenum = 0;
    while (getline (inFile, line))
    {
        linenum++;
        cout << endl << "Line #" << linenum << ":" << endl;
        istringstream linestream(line);
        itemnum = 0;
        num = 0;
        while (getline (linestream, item, ','))
        {
            itemnum++;
            if (itemnum == 2 || itemnum == 3 || itemnum == 4 || itemnum == 6)
            {
                num++;
                data.addtovect(linenum, num, item);
            }
            cout << "Item #" << itemnum << ": " << item << endl;
        }
    }
    return 0;
}

Store.h

#ifndef STORE_H
#define STORE_H

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

class store
{
    public:
        store();
        void addtovect(int, int, string);
        void print();

    private:

        vector< vector<string> > fullline();
};

#endif

Store.cpp

#include "store.h"

store::store()
{

}
void store::addtovect(int a, int b, string c)
{
    fullline[a][b].push_back(c);
}
void store::print()
{

}

错误是:

  

C:\ Users \ Owner \ Desktop \ C ++ projects \ csc125 \ lab4 \ store.cpp | 9 | error:无效类型'&lt;未解析的重载函数类型&gt; [int]'对于数组下标|。

我试图寻找一种方法来解决它,但我并没有真正接近解决它。我看到的一些事情说错误是由于向量与函数混淆引起的,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:2)

在头文件中,您将fullline定义为一个函数,该函数返回包含包含字符串的向量的向量:

vector< vector<string> > fullline();

删除括号,它将是一个包含包含字符串的向量的向量。

vector< vector<string> > fullline;

编辑:
当您尝试将字符串添加到fullline向量时,您会遇到一些问题:
1)不创建内部向量,在某些时候你必须将push_back向量放入第一个向量中 2)您正在尝试将字符串推送到字符串中:

fullline[a][b].push_back(c);

fullline < This is your first vector.
fullline[a] < Here you get the secondary vector.
fullline[a][b] < Here you get the object within the second vector (a string).
fullline[a][b].push_back(c) < Here you try to push back c into the string.

答案 1 :(得分:1)

你的变量是

     vector< vector<string> > fullline

fullline是一个向量,fullline[a]是一个向量,但fullline[a][b]是一个字符串。

string基本上是vector&lt; char&gt;,因此它也有push_back方法,但你只能push_back一个字符串字符串。