列表中的结构不起作用

时间:2013-05-11 22:59:23

标签: c++

我有这段代码:

HPP:

 #include <list>
 using namespace std;

 class funcionario
 {
      public:
          struct Dia {
          int d;
          int h;
          int id;
          int tipo;
     };
     funcionario ();
     void eliminar(int dia, int hora);

     private:
         list<Dia> agenda;
};

CPP:

#include "myClass.hpp"

funcionario::funcionario(){
    agenda = list<Dia> ();
}

void funcionario::eliminar(int dia, int hora) {
    list<funcionario::Dia>::iterator it;
    it = agenda.begin();
    while(it != agenda.end() && (*it).d <= dia) {
        if((*it).d == dia && (*it).h == hora) {
            agenda.erase(it);
            return;
        }
        ++it;
    }
}

我收到了这个编译错误:

  Funcionario.cpp: In constructor ‘funcionario::funcionario()’:
  Funcionario.cpp:5: error: cannot convert ‘std::list<funcionario::Dia, std::allocator<funcionario::Dia> >’ to ‘int’ in assignment
  Funcionario.cpp: In member function ‘void funcionario::eliminar(int, int)’:
  Funcionario.cpp:9: error: request for member ‘begin’ in ‘((funcionario*)this)->funcionario::agenda’, which is of non-class type ‘int’
  Funcionario.cpp:10: error: request for member ‘begin’ in ‘((funcionario*)this)->funcionario::agenda’, which is of non-class type ‘int’
  Funcionario.cpp:11: error: request for member ‘end’ in ‘((funcionario*)this)->funcionario::agenda’, which is of non-class type ‘int’

我不知道我做错了什么。

4 个答案:

答案 0 :(得分:1)

不确定您要实现的目标,但代码只需要通过完整的函数定义进行充实。我得到了这个编译:

#include <list>
class myClass
{
   public:
    myClass();
      struct myStruct {
          int myInfo;
      };
    void something();
    void doSomething(myStruct & ms);

   private:
       std::list<myStruct> myList;
};


myClass::myClass(){
    myList = list<myStruct> ();
}

void myClass::something() {
    std::list<myStruct>::iterator it;
    it = myList.begin();
    while(it != myList.end()) {
       doSomething(*it);
       ++it;
    }
}

顺便说一下(或者直接相关,不确定) - myClass()中myList的复制初始化是不必要的,正如其他人所说的那样。列表&lt;&gt;默认构造函数将做正确的事情,并且效率更高。

答案 1 :(得分:0)

您正在寻找的初始化类似于Initializing map and set class member variables to empty in C++? - 但实际上您将自动获得一个空列表(即通过std :: list默认构造函数)。

答案 2 :(得分:0)

- 编辑以反映您发布的原始代码 -

H未在任何地方声明。

and不是有效的C ++关键字或令牌。使用&&

使用本地标题包含形式:#include "myClass.hpp"

答案 3 :(得分:0)

这似乎在我的计算机上工作,所以它可能是编译器问题吗?尝试使用其他编译器并告诉我们它是否有效