我有这段代码:
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’
我不知道我做错了什么。
答案 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)
这似乎在我的计算机上工作,所以它可能是编译器问题吗?尝试使用其他编译器并告诉我们它是否有效