2014-05-05 12 views
5
#include <iostream> 
#include <memory> 

template<typename T> 
class Test: public std::enable_shared_from_this< Test<T> > 
{ 

public: 

    std::shared_ptr< Test<T> > getMe() 
    { 
     return shared_from_this(); 
    }; 

}; 

int main(int argc, const char * argv[]) 
{ 
    Test<int> aTest; 

    return 0; 
} 

Kiedy próbuję skompilować ten na Xcode 5 i dostaćenable_shared_from_this nie działa na Xcode 5

Use of undeclared identifier 'shared_from_this' 

Przetestowałem go i jego pracę w Visual Studio 2010.

+0

Zapomniałeś zakwalifikować go za pomocą 'std ::' tak jak w przypadku 'std :: shared_from_this()'. –

+0

Nie ma tutaj std namespace wymagane tylko do rozszerzenia z enable_shared_from_this i typu return funkcji getMe i są już wpisane. –

+0

Plus shared_from_this jest funkcją członkowską w klasie enable_shared_from_this. Czy na pewno czytasz pytanie? –

Odpowiedz

11
return this->shared_from_this(); 
      ^^^^^^ 

VC++ 2010 nie implementuje poprawnie reguł wyszukiwania dla szablonowych klas bazowych. Zachowanie klangowe jest poprawne. Powyższa poprawka sprawi, że będzie działać na obu twoich platformach.

+1

+1, dzięki czemu łatwiej jest wyszukiwać w Google więcej powiązanych informacji, jest to problem związany z wyszukiwaniem * zależnych * i * niezależnych * nazw. Bez kwalifikacji 'shared_from_this' jest ** nie ** jest nazwą zależną. –

+0

Wielkie dzięki! To wystarczy. Nadal nie rozumiem, dlaczego tutaj jest "to". Dowolny dokument, aby to sprawdzić? –

+1

@ali_nakipoglu: Cóż, zawsze jest standard ... w szczególności 14.6.2/3 * W definicji szablonu klasy lub klasy, jeśli klasa bazowa zależy od parametru szablonu, zakres klasy podstawowej nie jest badany podczas niewykwalifikowanego wyszukiwania nazw w punkcie definicji szablonu lub członka klasy lub podczas tworzenia szablonu lub elementu klasy. * Ale możesz również wyszukiwać w Google w dwóch fazach. –

Powiązane problemy