我正在寻找一种在PHP中绘制有向图的方法.(如http://upload.wikimedia.org/wikipedia/commons/0/08/Directed_acyclic_graph.png).我希望它能像GD一样输出图像来创建图形图像.
我在这上面搜索了很多,但我只能找到很多用于绘制图形的库(带条等),而不是有向图.
PS我试过通过system()使用dot(linux程序),但不幸的是我没有权限在服务器上这样做.此外,我没有权利在服务器上安装PHP扩展和类似的东西,所以它应该使用普通的PHP(理想情况下只包括一个文件).
提前致谢.
我有另一个问题,我似乎无法解决......,或在这个网站上找到...
我有一个带有地图的对象(称为DataObject),声明如下:
std::map<size_t, DataElement*> dataElements;
Run Code Online (Sandbox Code Playgroud)
现在我有一个复制功能(在复制构造函数中使用):
void DataObject::copy(DataObject const &other) {
//here some code to clean up the old data in this object...
//copy all the elements:
size = other.getSize();
for(size_t i = 0; i < size; ++i) {
DataElement* dat = new DataElement(*other.dataElements[i]);
dataElements[i] = dat;
}
}
Run Code Online (Sandbox Code Playgroud)
这不能编译,因为在const对象上不能使用dataElements [i].如何对const对象拥有的地图中的所有元素进行深层复制?
我知道在const映射上可以使用find()函数,但是如何获取我想要复制的实际对象?
我有一个类Foo,它有一个(简单的)析构函数.
其他一些类包含一个Foo对象数组(称为foolist),在该类的析构函数中,我这样做:
delete[] foolist;
Run Code Online (Sandbox Code Playgroud)
这崩溃了(gdb显示它在这个确切的行中崩溃).然而,通过使用打印输出,我看到愚蠢的所有元素都在没有问题地完成它们的析构函数(运行的析构函数的数量也等于在这个数组中分配的对象的数量,所以它们都被破坏了).代码中也没有其他的傻瓜删除.
我还确保傻瓜确实被初始化为数组,这样:
foolist = new Foo[number];
Run Code Online (Sandbox Code Playgroud)
错误是:
*** glibc detected *** /home/bas/projects/trunk/main:
free(): invalid next size (fast): 0x080a0e80 ***
Run Code Online (Sandbox Code Playgroud)
在这种情况下,什么可能导致delete []崩溃?
提前致谢!
还要问valgind的输出(statementNode是Foo,programNode是包含Foo列表的类)
==4111== 1 errors in context 1 of 2:
==4111== Invalid write of size 4
==4111== at 0x804B6FA: Parser::parseProgram(std::string) (statementnode.h:35)
==4111== by 0x80764D4: main (parser.h:35)
==4111== Address 0x42d9bdc is 4 bytes after a block of size 32 alloc'd
==4111== at 0x4025F53: operator new[](unsigned int) (vg_replace_malloc.c:299)
==4111== by 0x804A81E: Parser::parseProgram(std::string) (programnode.h:21)
==4111== by 0x80764D4: main …Run Code Online (Sandbox Code Playgroud) 我有2个班级:DataObject和DataElement.DataObject保持指针(只)DataElementS,和一个DataElement包含指向几种类型,其中一个DataObject.
这曾经没有问题,因为我只使用指针DataObject输入DataElement,所以DataObject在标题中的前向声明DataElement就足够了.
但是,现在,我尝试添加一个析构函数DataElement,我需要删除一个DataObject.在这方面,编译器说:
dataelement/destructor.cc: In destructor ‘DataElement::~DataElement()’:
dataelement/destructor.cc:8: warning: possible problem detected in invocation of delete operator:
dataelement/destructor.cc:8: warning: invalid use of incomplete type ‘struct DataObject’
dataelement/dataelement.h:7: warning: forward declaration of ‘struct DataObject’
dataelement/destructor.cc:8: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined. …Run Code Online (Sandbox Code Playgroud) c++ destructor class-design circular-dependency forward-declaration
c++ ×3
destructor ×2
arrays ×1
class-design ×1
const ×1
deep-copy ×1
graph-theory ×1
graphics ×1
map ×1
php ×1
stl ×1