[aspectc-user] where is the mistake ?
    MeunS Meunier 
    sylvainmeunier26 at hotmail.com
       
    Wed Aug  3 18:09:08 CEST 2005
    
    
  
Hi, i need help to solve this little problem.
i use this command to weave my aspect : ac++.exe -c main.cc -o 
weaved-main.cc -p . -a contract.ah
When i compile weaved-main.cc with cl (Visual .NET 2003), i obtain this 
error message :
contract.ah(22) : error C2061: erreur de syntaxe : identificateur 
'setAsTree'
thank's in advance
Sylvain Meunier
------------------------------------------------------- FILES 
------------------------------------------------------------
class header :
#ifndef __SETASTREE
#define __SETASTREE
#include <iostream>
class setAsTree
{
public:
	setAsTree(int v);
	setAsTree(const setAsTree& set);
	virtual ~setAsTree();
	setAsTree& operator=(const setAsTree& set);
	void insert(int v);
	setAsTree remove(int v);
	int min() const;
	int max() const;
	bool contains(int v) const;
	int val;
	setAsTree* ltree,* rtree;
	friend std::ostream& operator<<(std::ostream& stream,const setAsTree& set);
private:
	void copy(const setAsTree& set);
	void destroy();
};
std::ostream& operator<<(std::ostream& stream,const setAsTree& set);
#endif
class sources :
#include "./setAsTree.h"
using namespace std;
setAsTree::setAsTree(int v)
{
	ltree = NULL;
	rtree = NULL;
	val = v;
}
setAsTree::setAsTree(const setAsTree& set)
{
	copy(set);
}
setAsTree::~setAsTree()
{
	destroy();
}
setAsTree& setAsTree::operator=(const setAsTree& set)
{
	copy(set);
	return *this;
}
void setAsTree::insert(int v)
{
	if(v > val)
	{
		if(rtree)
			rtree->insert(v);
		else
			rtree = new setAsTree(v);
	}
	else if(v < val)
	{
		if(ltree)
			ltree->insert(v);
		else
			ltree = new setAsTree(v);
	}
}
setAsTree setAsTree::remove(int v)
{
	return *this;
}
int setAsTree::min() const
{
	if(ltree)
		return ltree->max();
	else
		return val;
}
int setAsTree::max() const
{
	if(rtree)
		return rtree->max();
	else
		return val;
}
bool setAsTree::contains(int v) const
{
	if(val == val)
		return true;
	else if(v > val && rtree)
		return rtree->contains(v);
	else if(v < val && ltree)
		return ltree->contains(v);
	else
		return false;
}
void setAsTree::copy(const setAsTree& set)
{
	if(this == &set)
		return;
	destroy();
	if(set.ltree)
		ltree = new setAsTree(*set.ltree);
	else
		ltree = NULL;
	if(set.rtree)
		rtree = new setAsTree(*set.rtree);
	else
		rtree = NULL;
	val = set.val;
}
void setAsTree::destroy()
{
	if(rtree)
	{
		delete rtree;
		rtree = NULL;
	}
	if(ltree)
	{
		delete ltree;
		ltree = NULL;
	}
}
std::ostream& operator<<(std::ostream& stream,const setAsTree& set)
{
	if(set.ltree)
		stream << *set.ltree;
	stream << set.val << " ";
	if(set.rtree)
		stream << *set.rtree;
	return stream;
}
the aspect:
#ifndef __CONTRACT
#define __CONTRACT
#include <iostream>
#include "./setAsTree.h"
aspect contract
{
	pointcut check_invariant(setAsTree& s) =
		(execution("% setAsTree::%(...)") || construction("setAsTree")) && 
that(s);
public:
	advice check_invariant(s) : after(setAsTree& s)
	{
	}
	advice "setAsTree" : bool invariant() const
	{
		return true;
	}
};
#endif
main file:
#include "./setAsTree.h"
#include <iostream>
using namespace std;
int main(int argc,char** argv)
{
	setAsTree set(4);
	set.insert(2);
	set.insert(3);
	set.insert(1);
	set.insert(2);
	cout << set << endl;
	return 0;
}
-------------------------------
_________________________________________________________________
Bénéficiez de 250 Mo de stockage avec MSN Hotmail http://g.msn.fr/FR1001/866
    
    
More information about the aspectc-user
mailing list