2016-04-11 32 views
-1

Bir nodelist yapmaya çalışıyorum ve iki sınıfım var: Düğüm & Nodelist.C++: Sınıf nesnelerini bir haritaya depolama (hata: 'Düğüm' türünde geçici bir nesnenin adresini alma)

Node::Node(int identifier, bool weighted){ 
    ID_ = identifier; 
    numberOfConnections_ = 0; 
    weighted_ = weighted; 
} 

Ben bu yöntemle düğümler arasında bir bağlantı eklemeyi deneyin:

error: taking the address of a temporary object of type 'Node'

nasıl:

void Nodelist::addOneWayConnection(int source, int target){ 
    connections_[source] = &Node(source, weightedlist_); <-- error 
    connections_[target] = &Node(source, weightedlist_); <-- error 
    connections_[source]->addConnection(connections_[target]); 
} 

hatası alıyorum düğüm yapıcı şöyle Düğüm sınıfına bir referans veriyorum?

Şimdiden teşekkürler!

+0

'connections_' nasıl tanımlanır? Muhtemelen sizin çözümünüzden kurtulmaktır. – NathanOliver

+0

std :: harita links_; –

+0

'Düğüm 'kaynağınız ve hedefiniz için belirli bir alan ayırmanız gerekir. –

cevap

1

Buna bir başvuru kaydetmek istemezsiniz. İfadeden sonra var olmaktan çıkar. Hata size söylediği gibi "geçici" dir. Düğümleri doğrudan depolamalı veya bir işaretçiyi saklamalı ve bunları ayırmak için new kullanmalısınız.

Düzenleme: Yorumunuzdan itibaren connections_'in aslında bir işaretçi beklediğini fark ettim (yukarıda da belirttiğim gibi). Yeni düğümler ayırmanız gerekiyor.

connections_[source] = new Node(source, weightedlist_); 
connections_[target] = new Node(source, weightedlist_); 
+1

Bittiğinde bu işaretçileri silmek için temiz kodları olması gerektiğini belirtmeyi unutmayın. Aksi takdirde bellek sızıntıları geliyor. – NathanOliver