1

我有这个代码:

惠普:

 #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;
};

cp:

#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

4 回答 4

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 的复制初始化是不必要的。list<> 默认构造函数会做正确的事,而且效率更高。

于 2013-05-11T23:16:45.607 回答
0

您正在寻找的初始化类似于在 C++ 中初始化映射并将类成员变量设置为空?- 但实际上你会自动获得一个空列表(即通过 std::list 默认构造函数)。

于 2013-05-11T23:13:26.557 回答
0

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

H没有在任何地方声明。

and不是有效的 C++ 关键字或标记。使用&&.

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

于 2013-05-11T23:17:14.727 回答
0

这似乎在我的计算机上运行,​​所以它可能是编译器问题?尝试使用另一个编译器并告诉我们它是否有效

于 2013-05-12T23:30:41.007 回答