---
title: "Callback funktion"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/105762-callback-funktion"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Viktor"
published: "2004-06-18T15:06:21.000Z"
updated: "2004-06-18T21:04:14.000Z"
replies: 3
views: 278
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/105762-callback-funktion"
---

# Callback funktion

## #1 — Viktor, 2004-06-18T15:06Z

Hej

Jag har en klass som ser ut såhär, 

```
class CApp
{
private:
	Event event;
	vwf::CVGPtr<vwf::CButton> m_Button;
	vwf::CVGPtr<vwf::CAction<CApp> > m_Action;
public:
	void Start();
	void Action(Event event, vwf::CVGPtr<vwf::CScreenObject> scrObj);
};

void CApp::Start()
{
	m_Button=CButton::create("Button");
	try
	{
		event.what=terminal::ENTER;

		m_Action=CAction<CApp>::create(this,&CApp::Action,event);
		m_Button->AddAction(dynamic_ptr_cast<CActionBase>(m_Action));

		m_Frame->AddScreenObject(dynamic_ptr_cast<CScreenObject>(m_Button));
		m_Frame->Show();

	}
	catch(out_of_range& oor)
	{
		cout << "Error: " << oor.what() << endl;
	}
}

void CApp::Action(Event event, CVGPtr<CScreenObject> scrObj)
{
	m_Button->SetText("Test");
	m_Button->RemoveAction(dynamic_ptr_cast<CActionBase>(m_Action));
}
```

Vid koden "m_Frame-\>Show()" så visas fönstret och programmet stannar där tills jag avslutar det. När jag trycker på Enter i programmet (när fönstret är uppe) så ska funktionen "Action" anroppas och det fungerar, jag kan ändra texten på knappen, MEN när jag debuggar programmet så ser "m_Action" ut såhär,

> {ptr = 0x805d250, count = 0x805d288}

det ser helt ok ut, den pekar ut sitt objekt och en räknare. Det ger samma resultat oavsätt om man är innan eller efter "m_Frame-\>Show" anroppet.
Men när jag kollar på "m_Action" i Action funktionen när jag har tryckt på enter så ser den ut såhär,

> {ptr = 0x0, count = 0x0}

Pekar inte på något! Ska det inte vara samma variabel/instans som i "Start" funktionen? "m_Button" har samma värde på alla ställen.

Det finns mycket mer kod, men jag hoppas och tror att felet ligger i den kod som jag har postat, säg till om ni vill se mer :)

/Viktor

Permalänk: https://www.webforum.nu/p/105762

## #2 — Sang-drax, 2004-06-18T18:26Z

Felet kanske ligger i vwf::CVGPtr.

Utan att veta någonting om denna klass eller något annat i övrigt gissar jag på att vwf::CVGPtr är en 'smart pekare' dvs den tar automatiskt bort det den pekar på när det inte längre används.

Permalänk: https://www.webforum.nu/p/1369094

## #3 — Viktor, 2004-06-18T19:54Z

Japp, det är en smart pekare (för smart? ;))
Men den kan ju inte vara borttagen eftersom den finns kvar senare i programmet, i Start funktionen :l 

/Viktor

Permalänk: https://www.webforum.nu/p/1369123

## #4 — Sang-drax, 2004-06-18T21:04Z

Lägg till lite breakpoints eller debug-utskrifter i CVGPtr::\~CVGPtr()

För att man ska kunna gissa felet behövs betydligt mer information, men jag tror att felet ligger i hur du hanterar den smarta pekaren tillsammans med övriga funktioner.

Permalänk: https://www.webforum.nu/p/1369148

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/105762-callback-funktion
