Ошибка при попытке вызвать функцию, которая добавит данные в вектор

0

Я получаю сообщение об ошибке, которое, как мне кажется, вызвано функцией, которую я написал для хранения данных из файла в векторе в моем классе под названием store в store.cpp.

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 | ошибка: недопустимые типы <неразрешенный перегруженный тип функции> [int] 'для индекса массива |.

Я попытался найти способ исправить это, но я действительно не приблизился к выяснению этого. Некоторые из вещей, которые я видел, говорили, что ошибка вызвана тем, что вектор запутался с функцией, но я понятия не имею, как я могу это исправить.

  • 1
    | не логично ИЛИ; его побитовое . попробуй ||
  • 0
    Woops, спасибо, исправил эту часть, но все равно получил ошибку. На самом деле я раньше тоже использовал = вместо ==, удивился, что тоже не уловил эту ошибку.
Теги:
class
vector

2 ответа

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.
  • 0
    я попробовал это, и на этот раз он сказал: «ошибка: нет соответствующей функции для вызова 'std :: basic_string <char> :: push_back (std :: string &)' |"
  • 0
    Это потому, что вы запускаете push_back для строки, а не вектора, позвольте мне обновить ответ r / q. :)
Показать ещё 16 комментариев
1

Ваша переменная

     vector< vector<string> > fullline

fullline - вектор, fullline[a] - вектор, а fullline[a][b] - строка.

string - это в основном вектор <char>, поэтому он также имеет метод push_back, но вы можете только push_back использовать символ для строки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню