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

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

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 に答える