首页新闻找找看学习计划

新人求教 错误 timer.h(15) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)

0
悬赏园豆:10 [待解决问题]

使用 'Microsoft Visual C++ 2013 Professional' 编译。

timer.h文件源码如下

#ifndef _TIMER_H_
#define _TIMER_H_

#include <string>
#include <sstream>
//#include <sys/time.h> //windows下的time.h中没有timeval定义
#include<windows.h> //windows下代替<sys/time.h>
#include<time.h> //windows下代替<sys/time.h>


using namespace std;


//windows下没有gettimeofday函数,从网上找的一个替代函数
int gettimeofday(struct timeval *tp, void *tzp)  //错误所在行
{
time_t clock;
struct tm tm;
SYSTEMTIME wtm;
GetLocalTime(&wtm);
tm.tm_year = wtm.wYear - 1900;
tm.tm_mon = wtm.wMonth - 1;
tm.tm_mday = wtm.wDay;
tm.tm_hour = wtm.wHour;
tm.tm_min = wtm.wMinute;
tm.tm_sec = wtm.wSecond;
tm. tm_isdst = -1;
clock = mktime(&tm);
tp->tv_sec = clock;
tp->tv_usec = wtm.wMilliseconds * 1000;
return (0);
}


class timer {

public:
int gettimeofday(struct timeval *tp, void *tzp);
timer(string timer_name) {
name = timer_name;
total_time = 0;
calls = 0;
}

~timer() {}

void tic() {
struct timeval tv;
gettimeofday(&tv, NULL);
last_time = (double)tv.tv_sec + 1e-6*(double)tv.tv_usec;
calls++;
}

void toc() {
struct timeval tv;
gettimeofday(&tv, NULL);
double cur_time = (double)tv.tv_sec + 1e-6*(double)tv.tv_usec;
total_time += cur_time - last_time;
}

const char *msg() {
ostringstream oss;
oss << "timer '" << name
<< "' = " << total_time << " sec in "
<< calls << " call(s)";
return oss.str().c_str();
}

void mexPrintTimer() {
mexPrintf("timer '%s' = %f sec in %d call(s)\n", name.c_str(), total_time, calls);
}

double getTotalTime() {
return total_time;
}

private:
string name;
int calls;
double last_time;
double total_time;
}

#endif

c++
昊昊903的主页 昊昊903 | 菜鸟二级 | 园豆:214
提问于:2017-10-30 09:06
< >
分享
所有回答(3)
0

这是你自己改变了源码吗?

鸿燕藏锋 | 园豆:568 (小虾三级) | 2017-11-03 17:32

支持(0) 反对(0) 昊昊903 | 园豆:214 (菜鸟二级) | 2017-11-03 18:48
0

public:
//int gettimeofday(struct timeval *tp, void *tzp);//注释掉

....

....

}; //加个分号

#endif

//VS2017编译通过

燧___ | 园豆:204 (菜鸟二级) | 2017-11-08 16:14
0

你的本意是想让timer类可以自由调用GetTimeOfDay这个函数是吧。

如果是这样的话,建议你把类里的声明更改一下:

1 int gettimeofday(struct timeval *tp, void *tzp);
2 //更改为
3 friend int gettimeofday(struct timeval *tp, void *tzp);
4 //如此便可以作为友元使用了,就像调用类内成员一样。
5 //并且友元函数在类外定义,更多的用法建议你去百度一下
TearsOfDawn | 园豆:34 (初学一级) | 2018-06-07 19:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册