Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我做错了什么?使用指向函数typedef的指针定义类。_C++_Class_Function_Pointers_Typedef - Fatal编程技术网

C++ 我做错了什么?使用指向函数typedef的指针定义类。

C++ 我做错了什么?使用指向函数typedef的指针定义类。,c++,class,function,pointers,typedef,C++,Class,Function,Pointers,Typedef,这是我的密码: // 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

这是我的密码:

// 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()成员时。我所能想到的就是它与函数引用的指针有关。也许有人能帮我解释一下

第49行应该是:

scheduler.Init(scheduler::Task&Task_list,1);//注意小写字母“s”:应该使用对象,而不是类


它也应该在一个函数中(在您的例子中可能是main)

您可以直接在其他方法/函数之外调用函数/方法

Scheduler.Init(Scheduler::Task &task_list,1);
这方面有两个问题。 上述内容似乎超出了任何函数/方法的范围。例如,你可以把它放在主管道里面

线路本身不正确。所以把它改成

scheduler.Init(&task_list,1);
通常对对象调用方法而不是类名,静态方法除外。将参数传递给方法时不传递参数类型

因此,main中更改的行将如下所示

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

{
    scheduler.Init(&task_list,1); 

    return 0;
}

Scheduler.Init(调度器::任务和任务列表,1)不合法。不在命名空间范围内,不在类范围内…projects\workdamnit\workdamnit\workdamnit.cpp,我喜欢它。您试图从何处调用“Init”以及您试图从哪个对象实例调用它?当您清除此问题时(出于教育目的),使用
std::function
:)在函数体之外,这怎么合法呢?对不起,伙计们。我曾尝试将它作为scheduler.Init(&task_list,1)使用,但我没有将它放在main中。。。。我不知道那会有什么不同。在main之外,它表示函数没有存储类或类型说明符。有人能告诉我为什么在这种情况下在main()内不会抛出相同的错误吗?@EvanJ227-我在main之外尝试过,但得到了不同的错误<代码>错误C2143:语法错误:缺少“;”“.”之前的错误C4430:缺少类型说明符-假定为int。注:C++不支持默认INT错误C23 71:“调度器”:重新定义;不同的基本类型