To jest mój kod: wirtualnego dziedziczenie z kowariantna typ zwracany i argument szablonu klasy błędu LINK w vs2013
#include <vector>
struct A
{
typedef std::vector<int> vec; //(1) template type
virtual A& test(vec) = 0;
};
struct B : public virtual A //(2) virtual inheritance
{
virtual B& test(vec) override //(3) covariant return type
{
return *this;
}
};
//std::vector<int> vv, cc(vv); //(4) explicit instantiate copy-ctor
int main()
{
B b;
b.test({});
}
Visual C++ 2013 dał mi błąd łącza.
error LNK2001: unresolved external symbol "public: __thiscall
std::vector<int,class std::allocator<int> >::vector<int,class
std::allocator<int> >(class std::vector<int,class
std::allocator<int> > const &)"
([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected]@Z)
Próbowałem gcc, i to kompiluje.
Jeśli zrobić jeden z następujących rzeczy, VC skompiluje:
- dokonać korekty (1) do typu non-szablonu
- usunąć "wirtualny" w wierszu (2)
- zmiana rodzaju powrót do & w wierszu (3)
- odkomentuj linia (4)
Dlaczego?
Link do testu na żywo: http://rextester.com/XZA77022 – ecatmur
Wygląda jak błąd VC. –
Powinieneś podać dokładną wersję kompilatora, gdy podejrzewasz błąd. VC++ 2013 nie jest wersją dokładną, istnieją 4 aktualizacje (takie jak dodatki Service Pack), a także określone poprawki błędów. Powinieneś uzyskać pełną wersję, otwierając wiersz poleceń narzędzia Visual Studio i wpisując 'cl' –