Chcę przetłumaczyć zagnieżdżone defekty python na C++, co robię przy użyciu zagnieżdżonych struktur.Struktury zagnieżdżone za pomocą metod używających szablonów
#include<iostream>
static void ffunc(int x, int y)
{
static int x1 = x;
static int y1 = y;
struct g
{
static void gfunc(int z)
{
static int z1 = z;
std::cout << x1 << y1 << z << std::endl;
struct h
{
static void hfunc(int k)
{
std::cout<< x1 << y1 << z1 << k << std::endl;
}
};
h::hfunc(4);
}
};
g::gfunc(3);
}
int main()
{
ffunc(1, 2);
}
Ten kod działa poprawnie. Problem polega na tym, że chcę szablonów, aby zagnieżdżone funkcje mogły korzystać z dowolnego typu parametrów. Jednak, gdy próbuję użyć szablonów:
#include<iostream>
template <typename t1>
static void ffunc(t1 x, t1 y)
{
static t1 x1 = x;
static t1 y1 = y;
struct g
{
static void gfunc(int z)
{
static int z1 = z;
std::cout << x1 << y1 << z << std::endl;
struct h
{
static void hfunc(int k)
{
std::cout<< x1 << y1 << z1 << k << std::endl;
}
};
h::hfunc(4);
}
};
g::gfunc(3);
}
int main()
{
ffunc(1, 2);
}
pojawia się błąd:
/tmp/cceIMovo.o: In function `void ffunc<int>(int, int)::g::gfunc(int)':
nested.cc:(.text+0x17d): undefined reference to `y1'
nested.cc:(.text+0x183): undefined reference to `x1'
/tmp/cceIMovo.o: In function `void ffunc<int>(int, int)::g::gfunc(int)::h::hfunc(int)':
nested.cc:(.text+0x1e5): undefined reference to `z1'
nested.cc:(.text+0x1ec): undefined reference to `y1'
nested.cc:(.text+0x1f2): undefined reference to `x1'
Czy ktoś wie, czy to, co chcę zrobić jest możliwe w C++? Dzięki!
ponieważ C++ jest kompilowany język (i dlatego od decyzji projektowych język), zagnieżdżanie kodowanym (a zwłaszcza metody w tych strukturach) mają konsekwencje. Sugeruję, abyś nauczył się "funkcji wbudowanych", aby zrozumieć plusy i minusy projektowania twojego kodu w ten sposób. –
@MegaJoules: nie często pytanie stackoverflow znajduje błąd kompilatora uczciwości. –
@MooingDuck: Chyba że mówimy o VC++. :-P – ildjarn