我想將python嵌套defs轉換爲C++,我使用的是嵌套結構。嵌套結構與使用模板的方法
#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);
}
此代碼正常工作。問題是,我想要模板,以便嵌套函數可以使用任何類型參數。然而,當我嘗試使用模板:
#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);
}
我得到的錯誤:
/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'
有誰知道,如果我想要做的是用C++可能?謝謝!
由於C++是編譯型語言(因爲語言的設計決策),嵌套結構(在這些結構特別法)產生的後果。我強烈建議你學習「內聯函數」來理解以這種方式設計代碼的優缺點。 –
@MegaJoules:並不是經常出現一個stackoverflow問題,它找到了一個誠實善良的編譯器錯誤。 –
@MooingDuck:除非我們在談論VC++。 :-P – ildjarn