0

これが私のコードです:

// WorkDamnit.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


class Scheduler
{

public:

    typedef void (*function_ptr) (void); 

    struct Task
    {
        function_ptr    function; 
        int             numOfTasks;
    };

    void Init(Task *tasks, int numOfTasks); 



private: 
    int     _numOfTasks; 
    Task    *_tasks; 

};

void Scheduler::Init(Scheduler::Task *tasks, int numOfTasks)
{
    _tasks = tasks; 
    _numOfTasks = numOfTasks;
}


void count() {}; 



Scheduler::Task task_list = 
{
    count, 1
}; 


Scheduler scheduler; 

Scheduler.Init(Scheduler::Task &task_list,1); 

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

コンパイラから次のエラーが表示されます。

1>c:\users\evan\documents\visual studio 2012\projects\workdamnit\workdamnit\workdamnit.cpp(49): error C2143: syntax error : missing ';' before '.'
1>c:\users\evan\documents\visual studio 2012\projects\workdamnit\workdamnit\workdamnit.cpp(49): error C2059: syntax error : '.'

コンパイラは、クラス オブジェクト定義の後の行が気に入らないようです。init() メンバーを呼び出そうとすると。私が考えることができるのは、関数参照へのポインタと関係があるということだけです。多分誰かが私のためにこれに光を当てることができますか?

4

2 に答える 2

1

呼び出し関数/メソッドは、他のメソッド/関数の外部で直接呼び出すことができます。

Scheduler.Init(Scheduler::Task &task_list,1);

この行には 2 つの問題があります。上記は、関数/メソッドの外側にあるようです。たとえば。メインの中に入れることができます。

行自体が正しくありません。だからそれを

scheduler.Init(&task_list,1);

通常、静的メソッドを除いて、クラス名ではなくオブジェクトのメソッドを呼び出します。メソッドにパラメーターを渡すときに、パラメーターの型を渡さないでください。

メインの変更された行は次のようになります

int _tmain(int argc, _TCHAR* argv[])

{
    scheduler.Init(&task_list,1); 

    return 0;
}
于 2013-06-17T04:48:21.127 に答える