forward_list - отсутствует ";"до "<" - PullRequest
0 голосов
/ 16 марта 2019

Для проекта наш профессор предоставил нам один файл .cpp и три файла .h, содержащие определения классов.Цель проекта - создать файлы реализации .cpp для этих классов.

Я знаю, что using namespace std; - это плохая практика, и ее следует избегать любой ценой, но учитель настаивает на трех важных моментах.в завершении проекта:

  1. Вы не должны изменять ни один из предоставленных файлов.«Ни одного персонажа».(Снижение оценок на 60%)
  2. Не удается создать в Visual Studio 2017. (уменьшение оценок на 60%)
  3. Сбой при нормальной работе.(Снижение оценки на 60%)

Моя проблема в том, что я получаю некоторые ошибки, относящиеся к его определению forward_list<> в одном из классов.Эти ошибки ничего не значат для меня ... Я несколько часов чесал голову, пытаясь исправить эти ошибки:

1>Animation.cpp
1>AnimationManager.cpp
1>c:\users\ali-g\desktop\cst8219\assignment2\assignment2\animation.h(7): error C2143: syntax error: missing ';' before '<'
1>c:\users\ali-g\desktop\cst8219\assignment2\assignment2\animation.h(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\ali-g\desktop\cst8219\assignment2\assignment2\animation.h(7): error C2238: unexpected token(s) preceding ';'
1>Ass2.cpp
1>Generating Code...
1>Done building project "Assignment2.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Вот предоставленный им файл .h, содержащий анимациюопределение класса:

//Animation.h
#pragma once

class Animation
{
    string animationName;
    forward_list<Frame> frames;
public:
    Animation(string name) :animationName(name) {}
    ~Animation() {}
    void EditFrame();
    void DeleteFrame();
    friend istream& operator>>(istream&, Animation&);// Add a Frame as in cin >> A;
    friend ostream& operator<<(ostream&, Animation&);// output the Frames as in cout << A;
};

Вот мой файл реализации .cpp из класса анимации:

//Animation.cpp
#include <iostream>
#include <string>
#include <forward_list>
using namespace std;
#include "Frame.h"
#include "Animation.h"

void Animation::EditFrame() {

}

void Animation::DeleteFrame() {

}

istream& operator>> (istream& in, Animation& animation) {


    return in;
}

ostream& operator<< (ostream& out, Animation& animation) {


    return out;
}

Предоставленный им файл .h, содержащий определение класса AnimationManager:

// AnimationManager.h
#pragma once

class AnimationManager
{
    string managerName;
    vector<Animation> animations;
public:
    AnimationManager(string name) :managerName(name) {}
    ~AnimationManager() {}
    void EditAnimation();
    void DeleteAnimation();
    friend istream& operator>>(istream&, AnimationManager&);// add an Animation
    friend ostream& operator<<(ostream&, AnimationManager&);// output the Animations
};

А вот мой файл реализации для класса AnimationManager:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include "Frame.h"
#include "Animation.h"
#include "AnimationManager.h"

void AnimationManager::EditAnimation() {

}

void AnimationManager::DeleteAnimation() {

}

istream & operator>>(istream &in, AnimationManager &manager){

    string name;

    cout << "Please enter Animation Name: ";
    cin >> name;

    //resize vector array to accommodate a new Animation
    manager.animations.resize(manager.animations.size() + 1);
    manager.animations.push_back(Animation(name));

}

ostream & operator<<(ostream &out, AnimationManager &manager){

}

Я также включу файл .h & .cpp для другого включенного файла заголовка (Frame.h), как это возможнопомочь вам найти мою (скорее всего глупую) ошибку.

"Frame.h":

// Frame.h
#pragma once
class Frame{ 
    char* frameName; 
    double duration; 
public:
    Frame(char*, double); 
    Frame(const Frame&); 
    ~Frame(); 
    Frame& operator=(const Frame&); 
    friend ostream& operator<<(ostream&, Frame&); 
};

"Frame.cpp":

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include "Frame.h"

Frame::Frame(char* name, double dur) {

    //Set frame name
    frameName = new char[strlen(name) + 1];
    strcpy(this->frameName, name);

    //set duration
    duration = dur;

}

Frame::Frame(const Frame& frame) {

    //copy name from passed frame
    frameName = new char[strlen(frame.frameName) + 1];
    strcpy(frameName, frame.frameName);

    //copy duration
    duration = frame.duration;

}

Frame::~Frame() {

    //free the space allocated for frameName
    if (frameName != nullptr) {
        delete[] frameName;
    }

}

Frame& Frame::operator= (const Frame& frame) {

    //create new Frame using given frame information
    Frame copyFrame = Frame(frame.frameName, frame.duration);

    //return reference to new frame.
    return copyFrame;

}

ostream& operator<< (ostream& out, Frame& frame) {

    //add frameName and duration to ostream.
    out << "\tframeName - " << frame.frameName << "; ";
    out << "duration - " << frame.duration << endl;

    //return ostream
    return out;

}

Я бы оченьпризнателен за любую помощь в решении этой проблемы.Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...