Toon posts:

[C++] Integer waardes blijven niet bewaard (nodig voor array

Pagina: 1
Acties:
  • 47 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik loop stage en krijg hier een stuk code voorgeschoteld wat ik niet zelf heb geschreven. Ik wil meerdere vtk bestandjes in 1 venster openen, dus ik zet deze in een array en laat ze allemaal in 1 venster zien. Dit lukt, maar als ik dan een nieuwe wil openen komt deze niet in de array. Volgens mij komt het omdat de integer 'a' steeds weer op 0 wordt gezet als er een nieuw document wordt geopend.

Heeft iemand een idee waar ik die integer moet declareren zodat deze niet steeds weer op 0 wordt gezet en dus gewoon netjes 1 hoger wordt?
(Misschien moet ik meer code geven, laat het me dan weten...)


// SampleDoc.cpp : implementation of the CSampleDoc class
//

#include "stdafx.h"
#include "Sample.h"

#include "SampleDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "vtkTextMapper.h"
#include "vtkActor2D.h"
#include "vtkTextProperty.h"
/////////////////////////////////////////////////////////////////////////////
// CSampleDoc

IMPLEMENT_DYNCREATE(CSampleDoc, vtkMFCDocument)

BEGIN_MESSAGE_MAP(CSampleDoc, vtkMFCDocument)
//{{AFX_MSG_MAP(CSampleDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSampleDoc construction/destruction

int a = 0;

CSampleDoc::CSampleDoc()
{
// TODO: add one-time construction code here

this->readertmp[a] = "c:/temp_stage/log106.vtk";
this->readertmp[a+1] = "c:/temp_stage/vtk345/log120.vtk";
this->readertmp[a+2] = "c:/temp_stage/log8.vtk";
this->readertmp[a+3] = "c:/temp_stage/log425.vtk";
this->readertmp[a+4] = "c:/temp_stage/log108.vtk";


for(int i = 0; i < 5; i++)
{
this->reader[i] = vtkDataSetReader::New();
this->reader[i]->SetFileName(readertmp[i]);
this->mapper[i] = vtkDataSetMapper::New();
this->mapper[i]->SetInput(this->reader[i]->GetOutput());
this->actor[i] = vtkActor::New();
this->actor[i]->SetMapper(this->mapper[i]);
this->actor[i]->VisibilityOn();
this->Props->AddItem(this->actor[i]);
}

/*
this->rdr = vtkDataSetReader::New();
this->rdr->SetFileName("c:/temp_stage/log106.vtk");
this->mppr = vtkDataSetMapper::New();
this->mppr->SetInput(this->rdr->GetOutput());
this->act = vtkActor::New();
this->act->SetMapper(this->mppr);
this->act->VisibilityOn();
this->Props->AddItem(this->act);
*/
vtkActor2D *act = vtkActor2D::New();
vtkTextMapper *txt = vtkTextMapper::New();
act->SetMapper(txt);
txt->SetInput("Visualization Window");
txt->GetTextProperty()->SetFontSize(24);
this->Props->AddItem(act);
txt->Delete();
act->Delete();
}

CSampleDoc::~CSampleDoc()
{

for(int i = 0; i < 5; i++)
{
this->reader[i]->Delete();
this->mapper[i]->Delete();
this->actor[i]->Delete();
}

this->rdr->Delete();
this->mppr->Delete();
this->act->Delete();
}

BOOL CSampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;

// TODO: add reinitialization code here
// (SDI documents will reuse this document)

return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CSampleDoc serialization

void CSampleDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}

/////////////////////////////////////////////////////////////////////////////
// CSampleDoc diagnostics

#ifdef _DEBUG
void CSampleDoc::AssertValid() const
{
CDocument::AssertValid();
}

void CSampleDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSampleDoc commands

BOOL CSampleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!vtkMFCDocument::OnOpenDocument(lpszPathName))
{
return FALSE;
}


this->readertmp[a] = lpszPathName;
// TODO: Add your specialized creation code here
this->rdr = vtkDataSetReader::New();
this->rdr->SetFileName(lpszPathName);
this->mppr = vtkDataSetMapper::New();
this->mppr->SetInput(this->rdr->GetOutput());
this->act = vtkActor::New();
this->act->VisibilityOn();

a++;


/*
this->rdr->SetFileName(lpszPathName);
this->mppr->SetInput(this->rdr->GetOutput());
this->act->VisibilityOn();
*/
return TRUE;
}

Verwijderd

Topicstarter
Zie nu dat er een if statement mist:


if(a==0)
{
this->readertmp[a] = "c:/temp_stage/log106.vtk";
}


deze moet ipv:


this->readertmp[a] = "c:/temp_stage/log106.vtk";

Verwijderd

Topicstarter
Maar het probleem blijft

(sorry dat ik dit allemaal in verschillende posts doe...)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Gatsiedarrie wat een rommeltje. :{

Ga eerst dit eens lezen:
P&W FAQ - De "quickstart"
En maak je het gebruik van code tags en de edit knop eigen.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Als ik het goed begrijp, wil je dat voor ieder object de member variabele 'a' dezelfde waarde heeft?
Kijk in dat geval eens naar static members:

code:
1
2
3
4
5
6
7
8
class Foo
{
  
  static int a;

};

int Foo::a = 0;

https://fgheysels.github.io/


Dit topic is gesloten.