[aspectc-user] Re: Error "1><anonymous unit>(1): error: invalid declaration near token `:'"
Olaf Spinczyk
Olaf.Spinczyk at informatik.uni-erlangen.de
Fri Jan 12 09:42:38 CET 2007
Hi Luigi,
an error in an "ananymous unit" indicates that ac++ with unable to parse
the code which it had generated itself. This should never happen. In
this sense you have found an ac++ bug.
The actual reason for the error message is that the class "Subject" does
not exist. The advice ...
>> advice realsubjects(): slice class: public Subject {};
... introduces a base class "Subject" into all classes described by
"realsubjects()". If this class does not exist, the generated code
cannot be parsed.
I will write a bug report that recommends to check whether introduced
classes do really exists.
Best regards,
Olaf
Luigi 'Comio' Mantellini wrote:
> I have deleted the baseclass injection... now the code is ok... in any
> case I haven't understood the problem...
>
> ciao
>
> luigi
>
> 2007/1/12, Luigi 'Comio' Mantellini <luigi.mantellini at gmail.com>:
>> 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