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:“调度器”:重新定义;不同的基本类型