[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