2012-04-15 3 views
1

좋아요, 저는 학교 프로젝트를 진행 중이며 다른 클래스의 링크 된 목록 (클래스 "목표"라는 클래스 내에서 "작업"), 그래서 나는 STL 클래스를 사용하고 있습니다. 지금은 거의이지만, 디스플레이 기능에서는 작업의 내용을 표시하기 위해 반복기를 사용하고 있습니다. 하지만 iteration에 taskList.begin()을 할당 할 수 없기 때문에 오류가 발생합니다.아니요 연산자 "="가이 피연산자와 일치합니다 - 표준 템플릿 라이브러리의 반복자

다음은 내가 관련 있다고 생각하는 코드입니다. objective.h

#ifndef OBJECTIVE_H 
    #define OBJECTIVE_H 
    #include <string> 
    #include <list> 
    #include "date.h" 
    #include "task.h" 
    using namespace std; 
    namespace team2 
    { 
     class objective 
     { 
      private: 
       string objective_name, objective_desc, resources[10]; 
       int category, priority, res_used; 
       double time; 
       date start, end; 
       int status; 
       std::list<task> taskList; 

      public: 
       // CONSTRUCTORS 
       objective(); 
       objective(string objN, string objD, int c, int p, date s, date e, double t, string res[], int resU, int stat, list<task>& tList); 

... 

       // CONSTANT MEMBER FUNCTIONS 
       void display() const; 
... 
     }; 
    } 
    #endif 

objective.cpp

(I 오류를 얻을 곳입니다)

#include "objective.h" 
#include "date.h" 
#include <cstdlib> 
#include <cassert> 
#include <string> 
#include <list> 
#include "task.h" 
using namespace std; 

namespace team2 
{ 
    void objective::display() const // display() - Displays the complete contents of a single objective 
    { 
     int days, hours, minutes; 
     std::list<task>::iterator taskIterator; 

     days = floor(time/24.0); // Find the max number of days based off of the time (in hours) 
     hours = floor(time - days*24); // Find the max number of hours after deduction of days 
     minutes = floor((time - (days*24 + hours))*60); // Find the number or minutes after taking into account hours and days 

     cout << "\nObjective Name: " << objective_name << endl; 
     cout << "Objective Description: " << objective_desc << endl; 
     cout << "Category: Quad " << category << endl; 
     cout << "Priority: " << priority << endl; 
     cout << "Starting Date: " << start.getMonth() << "/" << start.getDay() << "/" << start.getYear() << endl; 
     cout << "Ending Date: " << end.getMonth() << "/" << end.getDay() << "/" << end.getYear() << endl; 
     cout << "Time Required: " << days << " Days " << hours << " Hours " << minutes << " Minutes " << endl; 
     cout << "Resources: " << endl; 
      if(res_used == 0) 
       cout << "\tNo Resources" << endl; 
      for(int i = 0; i < res_used; i++) 
       cout << "\t" << resources [i] << endl; 

     cout << "Current Status: "; 
      if(status == 1) 
       cout << "Completed" << endl; 
      else if(status == 0) 
       cout << "Incomplete" << endl; 
     cout << "Tasks: " << endl; 
      if(taskList.empty()) 
       cout << "\tNo Resources" << endl; 
      for(taskIterator = taskList.begin(); taskIterator != taskList.end(); taskIterator++) 
      { 
       (*taskIterator).display(); 
       cout << endl; 
      } 
    } 
} 

하는 작업 클래스는 생략 몇 필드, 목적 클래스와 거의 동일합니다. for 루프에서 오류가 발생합니다. for (taskIterator = taskList.begin(); ...) 누구든지 문제의 원인을 알고 있습니까? 필요한 경우 더 많은 코드를 제공 할 수도 있습니다. 미리 감사드립니다.

답변

4

메서드는 const이고 taskList은 멤버이므로 const 반복자를 사용할 수 없습니다.

회원 방식을 변경하면 해당 방법으로 mutable 클래스 멤버를 변경하거나 const 멤버 메서드를 호출하지 않는다는 계약입니다. 비 const 반복자를 사용하면 해당 계약을 위반하게됩니다.

display이 CONST이기 때문에, 당신은 const를 반복자 사용할 수 있습니다

std::list<task>::const_iterator taskIterator;