当不允许对象数组时,创建许多相同类型的对象

时间:2014-04-30 00:28:20

标签: c++ arrays string object

我有一个类不允许创建相同类型的对象数组。

例: Canvas c; 我无法创建Canvas c[5]

我是否可以在外面某处修改字符串c,即c附加i并循环播放,并且应该能够放在Canvas之后。

生成c1c2c3c4的字符串操作部分。

我可以在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

2 个答案:

答案 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