Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Problem with function pointers (c++) with fully problem code

Author: Michel Langeveld

Date: 09:46:08 10/29/03

Go up one level in this thread


On October 29, 2003 at 12:41:36, Michel Langeveld wrote:

>>Hi Michel,
>>
>>I guess forEachGame is a static class function.
>>Then you have to use explicite class specifiers in your typedef:
>>
>>typedef void (PGNtoScreen::*on_game_function_type)(char *moves);
>>
>>Gerd
>
>Hi Gerd,
>
>Thanks for looking.
>
>It's actually a static class function. I think the problem is that the compiler
>doesn't know what object to use for calling this function. I made a complete
>code that shows the same problem. Still puzzled.

I wrote static class funtion, but it's not static it's just a normal class
member function

>#include <iostream>
>#include <stdlib.h>
>
>using namespace std;
>
>#define MAXBUF_SIZE 1000
>
>//typedef void (*line_event_type)(char *line);
>typedef void (PGNtoScreen::*line_event_type)(char *line);
>
>class PGNParse
>{
>public:
>	PGNParse()
>	{
>	}
>
>	void parse(char *strTextFile, line_event_type lineEvent)
>	{
>		char line[MAXBUF_SIZE];
>
>		FILE *f = fopen(strTextFile, "r");
>		while (!feof(f))
>		{
>			if (fgets(line, MAXBUF_SIZE, f) == NULL) continue;
>
>			lineEvent(line);
>		}
>	}
>};
>
>class PGNtoScreen
>{
>public:
>	PGNtoScreen()
>	{
>		lines = 0;
>	}
>
>	void PGNtoScreen::forEachLine(char *strLine)
>	{
>	   cout << strLine;
>		lines++;
>	}
>
>	void PGNtoScreen::doit(char *strFileName)
>	{
>	   PGNParse p;
>
>	   p.parse(strFileName, forEachLine); //gives error C2664
>
>		cout << "Number of lines printed: " << lines << endl;
>	}
>
>private:
>	int lines;
>};
>
>void main()
>{
>	PGNtoScreen o;
>	o.doit("docc2003.pgn");
>}



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.