我有一个类不允许创建相同类型的对象数组。
例:
Canvas c;
我无法创建Canvas c[5]
。
我是否可以在外面某处修改字符串c,即c
附加i
并循环播放,并且应该能够放在Canvas
之后。
生成c1
,c2
,c3
,c4
的字符串操作部分。
我可以在Canvas
之后添加这些吗?
这里的代码相同:
//C++ Headers
#include <iostream>
//ROOT Headers
#include <TCanvas.h>
using namespace std;
void CanvasArray(){
TCanvas c[5] = new TCanvas("c[5]", "", 400, 500);
for (int i; i<5; i++)
c[i]->Draw();
}
而且,输出:
Processing CanvasArray.C...
Error: Can't call TCanvas::TCanvas((class TCanvas*)0x98d76a8) in current scope CanvasArray.C:12:
Possible candidates are...
(in TCanvas)
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 private: TCanvas TCanvas::TCanvas(const TCanvas& canvas); //cannot copy canvas, use TObject::Clone()
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 public: TCanvas Canvas::TCanvas(Bool_t build=kTRUE);
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 public: TCanvas TCanvas::TCanvas(const char* name,const char* title="",Int_t form=1);
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 public: TCanvas TCanvas::TCanvas(const char* name,const char* title,Int_t ww,Int_t wh);
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 public: TCanvas TCanvas::TCanvas(const char* name,const char* title,Int_t wtopx,Int_t wtopy,Int_t ww,Int_t wh);
/usr/lib/i386-linux-gnu/root5.34/libGpad.so -1:-1 0 public: TCanvas TCanvas::TCanvas(const char* name,Int_t ww,Int_t wh,Int_t winid);
(in TPad)
*** Interpreter error recovered ***
[19]+ Stopped root -l CanvasArray.C
答案 0 :(得分:1)
您可以使用std::vector
:
void CanvasArray(){
std::vector<TCanvas> c;
for (int i = 0; i<5; i++) {
c.emplace_back("c[5]", "", 400, 500);
c[i].draw();
}
}
答案 1 :(得分:0)
请注意,您通常应该避免在ROOT中使用相同名称的不同对象。 ROOT附带Form
函数,其功能类似于printf
的{{1}}函数(尽管它避免了一些C
声明)。
此外,正如所说char*
可能是你的朋友作为容器类。由于您的初始示例使用std::vector
,因此我在此处举例说明我将new
放入容器而不是TCanvas*
TCanvas