【发布时间】:2014-04-30 00:28:19
【问题描述】:
我有一个类不允许创建相同类型的对象数组。
例如:
Canvas c;
我无法创建Canvas c[5]。
是否有可能我可以通过外部某处修改字符串 c,即在 i 后附加 c 并循环,并且应该能够放置在 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
【问题讨论】:
-
"是否有可能我可以通过外部某处修改字符串 c,即在 c 后面加上 i 并循环,并且应该能够放置在 Canvas 之后" 嗯? “在画布之后”是什么意思?字符串是从哪里来的?
-
@David Schwartz,我正在尝试获取 Canvas c1、c2、c3 .....、c100,但是,我希望标签 c1、c2.... c100 在外部某处生成为字符串,但后来放在 Canvas 之后,因为我无法初始化该特定对象的数组。
-
@Pgram 这是 C 还是 C++?为什么不能初始化一个数组?
-
它可以与 C++ 一起使用,但它不允许我这样做,每当我尝试初始化它时代码都会中断。
-
我不认为
TCanvas c[5] = new TCanvas("c[5]", "", 400, 500);看起来正确...您正在尝试使用指向单个对象的单个指针初始化一个包含 5 个对象的数组。你可以TCanvas c[5];默认初始化 5 个对象,然后循环遍历它们并重新初始化/修改具有特定值的对象吗?