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个问题。以上似乎超出了任何功能/方法。例如。你可以放在main里面。

该行本身是不正确的。所以改成

scheduler.Init(&task_list,1);

通常你调用对象上的方法而不是类名,静态方法除外。在将参数传递给方法时不传递参数类型。

所以 main 中的更改行看起来像

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

{
    scheduler.Init(&task_list,1); 

    return 0;
}
于 2013-06-17T04:48:21.127 回答
0

第 49 行应该是:

scheduler.Init(Scheduler::Task &task_list,1); // 注意小写的's':应该使用对象,而不是类

它也应该在一个函数内(在你的情况下可能是 main )

于 2013-06-17T04:43:24.300 回答