1

構造体のリストを作成しています:

struct task{
    int task_id;
    bool is_done;
    char* buffer;
    int length;

} task;
list<task> taskList;

そして、is_done ステータスを確認するためにタスクを反復しようとしています。

    for (std::list<task>::const_iterator iterator = taskList.begin(), end = taskList.end(); iterator != end; ++iterator) {

        if(iterator->is_done) {
            return 1;
        } else {
            return 2;
        }
    }

どこが間違っていますか?私は得る:「->」トークンの前にテンプレート引数がありません

4

4 に答える 4

0

std::find_if代わりに使用してください:

#include <algorithm>

...

bool isDone(const task &task)
{
    return task.is_done;
}

...

return std::find_if(taskList.begin(), taskList.end(), isDone) == taskList.end() ? 2 : 1;
于 2013-05-04T09:01:19.813 に答える
0

これを試して。タスク構造体と参照イテレータの変更に注意してください。(イテレータの名前をより簡潔にするために変更しましたが、実際には必要ありません)。混乱が少ないように見えるだけだと思います。

#include <list>

using namespace std;

struct task{
    int task_id;
    bool is_done;
    char* buffer;
    int length;

};


int main() {

    std::list<task> taskList;
    task task1;
    task1.buffer = "qwerty";
    task1.is_done = true;
    task1.length = 6;
    task1.task_id = 1;
    taskList.push_back(task1);


    for (std::list<task>::const_iterator it = taskList.begin(), end = taskList.end(); 
       it != end; ++it) {
        if((*it).is_done==true)
            return 1;
        else
            return 2;
    }

    return 0;
}
于 2013-05-04T09:06:28.033 に答える