[aspectc-user] Error "1><anonymous unit>(1): error: invalid declaration near token `:'"

Luigi 'Comio' Mantellini luigi.mantellini at gmail.com
Fri Jan 12 00:14:55 CET 2007


Dear all,

I'm trying to write a AspectC++ version of Proxy Pattern, but I have
the following error:

1><anonymous unit>(1): error: invalid declaration near token `:'

I don't know where I have made the mistake... can you help me to
understand the error?
(I'm using the trial version of AspectC++ plugin for VC).

Thanks in advance

luigi

(the code...)

[code]
# aabstractproxy.ah
#ifndef __AABSTRACTPROXY_H__
#define __AABSTRACTPROXY_H__

#pragma once;

aspect AAbstractProxy {

protected:
	pointcut virtual callers() =  "%";     // Chiamanti che devono
attraversare il proxy
    pointcut virtual requests() = 0;       // Metodi da monitorare
	pointcut virtual realsubjects() = 0;   // Classi che effettuano

private:
	advice realsubjects(): slice class: public Subject {};

//
public:		
	advice requests() /*&& target(callers()) && that(realsubjects()) */ :
around() {
		if (! isProxyProtected(/*tjp*/) ) {
			tjp->proceed();
		} else {
			handleProxyProtection(/*tjp*/);
		}
	};
	
protected:
	virtual bool isProxyProtected(/*JoinPoint *tjp*/) = 0;
	virtual void handleProxyProtection(/*JoinPoint *tjp*/) {
		return;   	
	};
};

#endif
[/code]

[code]
// arequestblocking.h

#ifndef __AREQUESTBLOCKING_H__
#define __AREQUESTBLOCKING_H__

#pragma once

#include <iostream>

#include "aabstractproxy.ah"

using namespace std;

aspect ARequestBlocking: public AAbstractProxy {

protected:
	pointcut virtual realsubjects() = "OutputImplementation";
	pointcut virtual requests() = call("% unsafeRequest(...)");
	pointcut virtual callers() = "ProxyTestClass";

	bool isProxyProtected(/*JoinPoint *tjp*/) {
			cout << "[RequestBlocking] intercepting unsafe " << endl;
			return true;
	};
};

#endif
[/code]

[code]
#ifndef __TESTPROXY_H__
#define __TESTPROXY_H__

#pragma once

#include <iostream>
#include "aabstractproxy.ah"
#include "requestblocking.ah"

using namespace std;

class OutputImplementation {

public:
	void safeRequest(char *s) {
		cout << "[OutputImplementation.safeRequest()]: " << s << endl;
	}

	void regularRequest(char *s) {
		cout << "[OutputImplementation.regularRequest()]: " << s << endl;
	}
		
	void unsafeRequest(char *s) {
		cout << "[OutputImplementation.unsafeRequest()]: " << s << endl;
	}
};


class ProxyTestMain {

public: starttest() {

	    OutputImplementation *real = new OutputImplementation();

		cout << "\n===> Issuing SAFE request..." << endl;
		real->safeRequest("Safe Reqeust");
		cout << "\n===> Issuing REGULAR request..." << endl;
		real->regularRequest("Normal Request");
		cout << "\n===> Issuing UNSAFE request..." << endl;
		real->unsafeRequest ("Unsafe Request");
		cout << "\n===> Issuing SAFE request..." << endl;
		real->safeRequest("Safe Reqeust");
		cout << "\n===> Issuing REGULAR request..." << endl;
		real->regularRequest("Normal Request");
		cout << "\n===> Issuing UNSAFE request..." << endl;
		real->unsafeRequest ("Unsafe Request");
	}	
};

void testProxy() {
	ProxyTestMain *m=new ProxyTestMain();
	m->starttest();
	cout << "Start Proxt Pattern testing..." << endl;
}

#endif
[/code]



-- 
Luigi 'Comio' Mantellini

The three laws of users:

1. A user may not injure a sysadmin, or through inaction,
   allow a sysadmin to come to harm.
2. A user must obey the orders given it by sysadmins except
   where such orders would conflict with the First Law.
3. A user must protect its own existence as long as such
   protection does not conflict with the First or Second Law.



More information about the aspectc-user mailing list