Объекты и функции в C ++ - PullRequest
       147

Объекты и функции в C ++

0 голосов
/ 21 февраля 2019

Я работаю над тем, что будет принимать входной файл строк и организовывать их на основе пользовательского входного файла.Верхняя часть входного файла - это то, как он организован, а остальная часть - это отформатированная информация, каждая из которых находится в отдельной строке для ввода в объект. Каждый отдельный фрагмент информации, который необходим для моего объекта, разделен на 5 последовательных строк.

Моя проблема заключается в функции печати, которая вызывается в массиве указателей объектов и передается впредпочтение сортировки пользователя при вызове.Пока что я обнаружил, что я не могу даже вызвать функцию объекта.Я пробовал несколько разных решений, таких как создание совершенно нового объекта (Object myObject ();) и вызов той же функции печати, но это тоже не сработает.Есть ли способ вызвать функцию в массиве указателей на объекты, которые я создал, и передать эту переменную предпочтения? Я попытался добавить конструктор по умолчанию и вызвать функцию для этого, но когда я сделал это, два теста в object.cpp, которые отслеживают переменные при вызове print, показывают, что переменные передаются как NULL, возможно.

main.cpp

#include <iostream>
#include <string>
#include "object.h"

int main()
{
    Object **ptr = new Object*[5];//Create array of object pointers

    string firstLine, secondLine, thirdLine, userPreference;
    float fourthLine;
    int fifthLine;

    string currentLine;
    int lineCounter = 0;
    int arrayCounter = 0;

    getline(cin, userPreference);//Preference on sorting method

    while(getline(cin, currentLine)) {//Main loop
        switch(lineCounter) {
            case(1):
                firstLine = currentLine;
                lineCounter++;
            break;

            case(2):
                secondLine = currentLine;
                lineCounter++;
            break;

            case(3):
                thirdLine = currentLine;
                lineCounter++;
            break;

            case(4):
                fourthLine = stof(currentLine);//Get float value of currentLine and set fourthLine equal to it
                lineCounter++;
            break;

            case(5):
                fifthLine = stoi(currentLine);//Get integer value of currentLine and set fithLine equal to it
                ptr[arrayCounter] = new Object(firstLine, secondLine, thirdLine, fourthLine, fifthLine);
                arrayCounter++;//Step to next element now that the current element is filled
                lineCounter = 0;//Reset lineCounter
                cout << "case 5 test" << endl;
            break;
        }//End switch
    }

    ptr -> print(userPreference);

    for(int i = 0; i < arrayCounter; i++) {//Delete everything
        cout << "Test";
    }
}

object.cpp

#include "object.h"
#include <iostream>

using namespace std;

Object::Object(string title, string URL, string comment, float length, int rating) {
    vidTitle = title;
    vidURL = URL;
    vidComment = comment;
    vidLength = length;
    vidRating = rating;
}

void Object::print(string preference) {
    vidPreference = preference;
    cout << vidPreference;
    cout << preference;
    if(vidPreference == "rating") {
        //Rating sort
        //Is the array passed through correctly? If so, can I climb through like I do to assign it in main?
    }

    if(vidPreference == "length") {
        //Length sort
    }

    if(vidPreference == "title") {
        //Title sort
    }
    else {
        cout << preference << " is not a legal sorting method, giving up." << endl;
    }
}

object.h

#ifndef OBJECT_H
#define OBJECT_H

#include <string>

using namespace std;

class Object
{

    public:
        Object(string title, string URL, string comment, float length, int rating);
        void print(string preference);
    private:
        string vidTitle, vidURL, vidComment, vidPreference;
        float vidLength;
        int vidRating;
};

#endif

1 Ответ

0 голосов
/ 21 февраля 2019

Использование

ptr -> print(userPreference);

будет действительным, если бы ptr было типа Object*.Поскольку он имеет тип Object**, вам нужно использовать выражение, которое оценивается как Object*.Например,

for(int i = 0; i < arrayCounter; i++)
{
   ptr[i]->print(userPreference);
}
...