Autor Wątek: VS 11 wyrzuca dziwne błędy z projektu z poprzedniej wresji  (Przeczytany 2908 razy)

Offline TDM

  • Użytkownik

# Maj 04, 2013, 18:52:08
Witam!

Właśnie chciałem zacząć pisanie w nowej wersji Visuala ale zaraz przy kompilowaniu projektów które kiedyś bez problemu się kompilowały natrafiam na dziwne błędy tak jakby bibliotek wew. Nie mam zielonego pojęcia o co chodzi
c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap(431): error C2064: term does not evaluate to a function taking 0 arguments
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(239) : see reference to function template instantiation '_Ret std::_Callable_obj<_Ty>::_ApplyX<_Rx>(void)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Rx=void
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(239) : see reference to function template instantiation '_Ret std::_Callable_obj<_Ty>::_ApplyX<_Rx>(void)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Rx=void
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(239) : while compiling class template member function 'void std::_Func_impl<_Callable,_Alloc,_Rx>::_Do_call(void)'
1>          with
1>          [
1>              _Callable=_MyWrapper,
1>              _Alloc=std::allocator<std::_Func_class<void>>,
1>              _Rx=void
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(514) : see reference to class template instantiation 'std::_Func_impl<_Callable,_Alloc,_Rx>' being compiled
1>          with
1>          [
1>              _Callable=_MyWrapper,
1>              _Alloc=std::allocator<std::_Func_class<void>>,
1>              _Rx=void
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(514) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Do_alloc<_Myimpl,_Ty,_Alloc>(_Fty &&,_Alloc)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Alloc=std::allocator<std::_Func_class<void>>,
1>              _Fty=int
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(514) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Do_alloc<_Myimpl,_Ty,_Alloc>(_Fty &&,_Alloc)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Alloc=std::allocator<std::_Func_class<void>>,
1>              _Fty=int
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(514) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Reset_alloc<_Ty,std::allocator<std::_Func_class<_Ret>>>(_Fty &&,_Alloc)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Fty=int,
1>              _Alloc=std::allocator<std::_Func_class<void>>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(514) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Reset_alloc<_Ty,std::allocator<std::_Func_class<_Ret>>>(_Fty &&,_Alloc)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Fty=int,
1>              _Alloc=std::allocator<std::_Func_class<void>>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(675) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Reset<_Ty>(_Fty &&)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Fty=int
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(675) : see reference to function template instantiation 'void std::_Func_class<_Ret>::_Reset<_Ty>(_Fty &&)' being compiled
1>          with
1>          [
1>              _Ret=void,
1>              _Ty=int,
1>              _Fty=int
1>          ]
1>          c:\programowanie\framework_gui\gui_listbox.cpp(19) : see reference to function template instantiation 'std::function<_Fty>::function<int>(_Fx &&)' being compiled
1>          with
1>          [
1>              _Fty=void (void),
1>              _Fx=int
1>          ]
1>          c:\programowanie\framework_gui\gui_listbox.cpp(19) : see reference to function template instantiation 'std::function<_Fty>::function<int>(_Fx &&)' being compiled
1>          with
1>          [
1>              _Fty=void (void),
1>              _Fx=int
1>          ]

Wyrzuca błąd w moim pliku c:\programowanie\framework_gui\gui_listbox.cpp(19) : see reference to function template instantiation 'std::function<_Fty>::function<int>(_Fx &&)' being compiled
Tutaj jest jego kod:
CGUIListBox::CGUIListBox() : m_ItemSize(20.0f),
m_MaxVisibleItems(0),
m_ItemOffset(0),
m_CharOffset(0),

m_SelectedItem(-1),

m_VerticalScrollBar(0),
m_HorizontalScrollBar(0),

m_OnSelectItemFunctionPointer(0),

CGUIElement()
{ // <- na to miejsce przekierowywuje mnie VS, czyli tutaj jest błąd ? Ale gdzie ? Zmienił się standard czy jak ?
m_ItemVector.clear();
}

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Fiołek

  • Użytkownik
    • Blog

  • +1
# Maj 04, 2013, 20:51:26
Przy inicjalizacji m_OnSelectItemFunctionPointer 0 nie może być skonwertowane na "funkcje z 0 argumentów", trzeba użyć nullptr(które ma inny typ niż stary dobry NULL).

Sample:
Kod: (c++) [Zaznacz]
class Sample
{
private:
std::function<int(void)> SampleFunc;

public:
Sample()
: SampleFunc(0) //0 -> std::function<int(void)> nie zadziała
//: SampleFunc(nullptr) //nullptr -> std::function<int(void)> zadziała, bo std::function ma od tego osobny konstruktor
{ }
};

Offline Xion

  • Redaktor
    • xion.log

# Maj 04, 2013, 21:43:55
Względnie powinna być gdzieś opcja w kompilatorze która ustawia tryb zgodności z C++03.